关于尚观
最新课程体系
企业服务
零起点咨询
开放课程
报名咨询
免费资源申请
Oracle服务
学员专区&薪资
认证课程
  • 尚观首页
  • 尚观简介
  • 师资力量
  • 尚观文化
  • 尚观动态
  • 加入尚观
  • 联系我们
  • 珍贵瞬间
  • 院校合作
  • Linux系统与集群
  • 数据库集群架构师
  • 嵌入式内核驱动开发
  • 服务器开发架构师
  • Android开发架构师
  • RHCE/LPI认证体系
  • Oracle OCP认证
  • 企业高级技术培训
  • 批量人才供应及研发团队建设
  • 软件外包及研发项目合作
  • 人力外包及人力供应
  • 猎头服务
  • 开启职业生涯
  • 如何入门
  • Unix/Linux职业方向
  • 嵌入式职业方向
  • 集群(Cluster)Oracle(DBA)方向
  • 新手专栏
  • Android开发方向
  • Unix/Linux新手专栏
  • Unix/Linux管理
  • 嵌入式及POSIX开发
  • Linux开源文化及市场
  • 最近网络课堂
  • P2P教学视频
  • 精彩Linux培训视频
  • 零起点数据库集群(长期)
  • 嵌入式驱动(长期)
  • Linux金牌三证(RHCE级)
  • Linux架构师(RHCA级)
  • 嵌入式/驱动加速课程
  • Linux免费网络安全公开课
  • 免费Linux资料申请
  • 免费Linux安全&DDOS防御课程
  • 免费嵌入式Linux开发课程
  • 免费Linux网络安全机制
  • 尚观服务
  • 软件产品
  • 技术方案
  • 尚观支持
  • 学员毕业薪资(不断更新中)
  • 加入尚观猎头服务(仅限老学员)
  • OCP认证
  • Intel认证
  • RHCE认证
  • RHCE+OCP
  • RHCE+LPI
  • OCM认证
  • RHCA认证


    您现在的位置:尚观Linux培训 - 嵌入式Linux培训专家尚观Linux培训 » UNIX/Linux新手专栏 » MySQL查询优化

 
 
咨询热线
  • 免费咨询电话:
    400-700-0056
    800-810-0056

    教学就业监督电话:
    400-810-3016



  • 在线咨询
免费资源
  • -4月24日
  • [沈阳]Linux嵌入式-4月24日
  • [上海]DDos攻防-4月24日
  • [上海]Linux嵌入式-4月24日
  • [深圳]DDos攻防-4月24日
  • [深圳]Linux嵌入式-4月24日
  • [北京]DDos攻防-4月24日
  • 就业课程
  • 免费课程
  • 五万年薪就业保证课程

  • ULP-S 尚观王者IT集群课程 v8版
  • UEA嵌入式内核驱动开发者 V8版
  • UGA-Android开发架构师 V3.2版
  • ULA-Linux云计算集群架构师课程
  • UOA-Oracle数据库集群架构
  • 八万年薪就业保证课程

  • UOM- Oracle集群大师
  • UEM-嵌入式开发大师
  • 纯免费!shrek主讲 linux网络攻击及安全课程 2月8日
  • 纯免费!连续3天,Android开发入门实战免费公开课 12月27日
  • 纯免费!“云”指南“嵌入式”指北大型讲座! 12月24日
  • 纯免费!云计算虚拟化应用大型讲座! 12月17日
  • 纯免费! OCM考试经验分享! 12月7日
  • 纯免费! RHCA考试与学习经验分享! 12月13日
  • 纯免费! Android在线天气预报开发实战 11月30日
  • 纯免费! shrek主讲Linux攻防与安全! 11月24日
  • 纯免费! Redhat最高级RHCA考试与学习经验分享 11月22日
Linux培训●最新开班
  • [北京]UGA课程12月班热招!
  • [北京]UEA课程12月班热报!
  • [北京]ULP-S课程12月班热招
  • [上海]UEA课程12月班热招!
  • [上海]ULP-S课程12月班热招
  • [上海]UGA课程12月班热招!
  • [深圳]ULP-S课程12月班热招
  • [深圳]UEA课程12月班热招!
 
MySQL查询优化
  • 在实际工作中,无论是对数据库系统(DBMS),还是对数据库应用系统(DBAS),查询优化一直是一个热门话题。一个成功的数据库应用系统的开发,肯定会在查询优化上付出很多心血。对查询优化的处理,不仅会影响到数据库工作效率,而且会给公司带来实实在在的效益问题。MySQL是一个开源软件,但它的性能丝毫不逊于商业数据库,它的速度已经相当快。但要想做好查询优化,还要考虑一些技巧上的东西。下面是我学习和使用MySQL以来的一些对优化查询的感受。

      首先,我们应该考虑哪些因素能影响到查询优化?可以分为:机器硬件、索引、系统参数、查询技巧等。对于一个查询优化问题,我们应该首先考虑哪各方面呢?索引的使用应该再考虑的首条,毋庸置疑的是,在没有使用索引的前提下,想用其它招数来大幅度改善性能的做法往往收获甚微,纯粹是在浪费时间,可事实无绝对,有些场合反而需要去抑制优化程序的行为。

      我们先来说说索引。索引能提高查询效率的原因之一是它可以让我们知道最后一个符合条件的数据行出现在什么位置,此后的数据行都用不着在检查了,另一个原因是人们已经发明了很多中定位算法来迅速查出第一个符合条件的数据行出现在什么位置,用不着从索引的开头通过线性扫描法去定位一个匹配项。

      MySQL在建立索引时,对不同的数据表有不同的细节:MyISAM数据表,数据行将被保存在数据文件里,其索引值将被保存在索引文件里,而BDB处理程序把同一个BDB数据表的数据值和索引值保存在同一个文件里,InnoDB处理程序则是把所有InnoDB数据表的数据值和索引值都保存在同一个表空间里。这些看似与建立索引无关,其实是很重要的,待会我后说道。还有,索引不仅能给单据表带来好处,然而,索引给涉及多个数据表的关联查询带来的好处就更打了。

      建立索引也要考虑它的缺点。首先,索引需要消耗磁盘空间(现在磁盘已经很便宜了),索引越多,消耗的空间也就有多。对于MyISAM数据表,过多的索引会使索引文件优先与数据文件达到尺寸上限。对于BDB数据表,因为它把数据值和索引值都保存在同一个文件里,所以增加索引必然会使他更快地达到BDB数据文件的尺寸上限。InnoDB数据表共同分享着InnoDB表空间里的存储空间,所以增加索引必然会加快InnoDB表空间的消耗速度。不过,只要还能增加磁盘空间,就能通过给InnoDB表空间增加组件的办法扩充之。

      其次,索引过多,会减慢被索引的数据列上的插入、删除和修改操作的速度。因为在写入记录时,MySQL还必须修改与之有关的所有索引。

      下面我们考虑应该选择什么样的数据列来创建索引?怎样才能创建出最使用的索引?怎样处理数据类型给索引带来的影响?原则是:

      1、 引应该创建在搜索、排序、归组等操作所涉及的数据列上,只在输出报告里出现的数据列不是好的候选。

      2、 尽量使用唯一化索引。因为如果数据列里有很多彼此重复的值,建立在其上的索引就不会有好的效果。

      3、 尽量对比较短的值进行索引。

      4、 对于复合索引,MySQL会先匹配它的第一个索引列,如果匹配不上它就不会使用这个索引了。

      5、 不要建立过多的索引。

      6、 考虑将在这个数据列上进行怎样的比较操作。对于HEAP数据表来说,它只会用“=”来比较,其他比较操作就帮不上忙了。

      7、 利用慢查询日志来找出那些性能低劣的查询。不过不要认为这是绝对的,因为MySQL会将凡是没使用索引的查询一并写入这个日志里,要有选择的查看这个日志哦。

      8、 要尽量把数据列声明为NOT NULL,这样可以排除在对空值的查询,在有些时候,能起到很大的作用。

      9、 对于字符串数据列,如果其取值是有限的,应优先考虑使用ENUM类型,因为MySQL是用处理数值型的方法来处理这种字符串的,速度比处理字符串要快得多。

    10、 对于那些声明为可变长度的数据列(如varchar型),时间长了会使得数据表出现很多碎片,减慢查询效率,我们可以用OPTIMIZE TABLE语句对之进行整理。

      11、 将数据压缩到BLOB数据列里,就能只通过一次性查询找到数据,或者把BLOB数据列单独存入一个文件。

      12、 有时我们可以人为的为一个数据表建立索引,然后查询这个索引达到快速查询的目的。例如:我们先给一个数据表再建一个数据列,根据数据表里其他数据列计算出一个散列值并保存到刚建的数据列里,这样就可以通过搜索散列值的方法去检索想要找到数据行。

      MySQL查询优化程序是尽可能的使用索引,而且是尽可能地使用那些最为挑剔的索引,以便尽可能多和尽可能快的排除那些不符合查询条件的数据行。可以依照以下原则帮助优化程序:

      1. 尽量对同类型的数据列进行比较,必要时可以先用ALTER TABLE语句把其中之一的类型修改为与另一个数据列相同。

      2. 尽量让已经索引的数据列在比较表达式中单独出现。

      3. 尽量减轻模糊匹配查询,例如:不要在LIKE模式的开头使用通配符等。

      4. 多试几种查询命令。

      5. 不要滥用MySQL的类型自动转换功能,如:数字3就不能写成字符‘3’,加重MySQL的类型转换,会使它的性能下降。

      下面说说加载数据。

      加载数据时要采用批量加载,尽量减少MySQL对索引的刷新率,例如:LOAD DATA 语句要比INSERT 语句效率高,如果必须使用INSERT 语句,请尽量使他们集中在一起,减少对索引的刷新次数。对于支持事务处理机制的数据表类型,应该把这些INSERT 语句放在同一个事务里,对于不支持事务处理机制的数据表类型,应该现对数据表进行写锁定,然后在数据表锁定期间发出这些INSERT语句。对于大量数据,可以先加载数据在建立索引。

      在机器硬件方面:

      1. 应为机器安装更多内存。

      2. 购置高速磁盘以缩短I/O等待时间。

      3. 使用多个物理硬盘,提高并行操作能力。

      4. 使用多个处理器。

      在一个具体的数据库应用系统中,要根据实际需要来采用各种优化策略,以便使顾客与公司达到双赢的目的。

      参考文献

      【1】Paul Dubois MySQL:The definitive guide to using,Programming,and administering MySQL 4 Second Edition China Machine Press 2004.1




    精彩Linux视频、嵌入式视频、Android视频、Oracle视频,免费先学!
    查看:尚观Linux培训学员最新就业薪资待遇统计报告!
    查看:UGA-4G Android开发架构师大纲
    查看:UDA-Linux服务器开发架构师大纲
    查看:UEA-嵌入式内核驱动开发者大纲
    查看:UOA-Oracle数据库集群架构大纲
    查看:ULA-Linux系统与集群架构师大纲

    填表获取 Linux、嵌入式、Oracle 技术资料

  • 姓    名:
  • 固    话:
  • 手    机:
  • E-Mail :
  • 所在地:
  •         

北京(总部)

电子地图
电话:(010)62113016/17 68949060
地址:北京海淀区中关村南大街 甲10号 银海大厦南区410-418

上海(Shanghai)

电子地图
电话:(021)64859996 64859889
地址:上海徐汇区钦江路333号漕河泾开发区38号楼申能科技3楼

深圳(Shenzhen)

电子地图
电话:(0755)82995128 82995168
地址:深圳福田区 彩田路 中深花园B2005室

沈阳(Shenyang)

电子地图
电话:(024)31500816 31500817
地址:沈阳和平区三好街54号物产科贸大厦2号楼201室

大连(Dalian)

电子地图
电话:(0411)84336822 84326822
地址:大连沙河口区西安路86号行政大厦(罗斯福广场对面)17楼1705室

成都(Chengdu)

电子地图
电话:(028)66677820 66677828
地址:成都青羊区上西顺城街252号顺吉大厦8楼B4

广州(Guangdong)

电子地图
电话:(020) 88900632 81368992
地址:广州市越秀区人民北路612号中广大厦9层(国际银行中心旁)

南京(Nanjing)

电子地图
电话:(025)83176720 83176710
地址:南京新街口广场中山东路9号天时科技园12层G、H单元

武汉(Wuhan)

电子地图
电话:(027)87596339
地址:武汉市洪山区鲁磨路118号国光大厦A座1201室1203室




2005-2009高新技术企业

LPI授权培训考试中心

CSDN战略伙伴

51Job战略伙伴

Oracle WDP授权培训与考试中心

Intel软件服务培训供应商

Redhat授权培训与考试中心

高新技术企业证书
 

友情链接(联系QQ:87865954):   LPI  RedHat  CSDN  ChinaUnix  ITPub  Eygle.Com  Linux培训  嵌入式培训  Linux联盟  Unix爱好者  51CTO开发 尚观知识库 天极导航  PHP中国  网易教育  天津赶集网  工具软件下载  连锁加盟  天极网南京站  个人简历模板  北京赶集网  畅享网  网页制作  Linux  ZOL服务器  广告联盟  颈椎病的症状  21CN教育  亿芯网  强直性脊柱炎  数码比价网  投资创业  DJ网站  嵌入式技术网  OCM培训  股票入门  大功率LED网   搜电网  杭州写字楼网  时尚论坛  医药营销联盟  Linux技术中心  泉州人才网  大学后  天天健康  RHCE培训  SVN中文技术网  网罗天下  Oracle培训  北京法律咨询  嵌入式资讯网  Fedora中文爱好者  沸点100网   教培英才网  中国二手车城  Linux公社  Oracle教程  深圳本地宝  狂人网  0090网址大全  数码比价网  IT英才网

  • PR
COPYRIGHT © 2000-2009 北京尚观科技有限公司 - 北京市海淀区尚观培训学校 - Linux培训及嵌入式培训专家 ALL RIGHTS RESERVED

咨询热线:400-700-0056    800-810-0056
京ICP备09018548号 | Linux就业信息 | 免责声明 | 隐私声明 |