基于索引SQL语句优化.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于索引SQL语句优化

基于索引SQL语句优化   摘要: 在开发数据库初期,由于数据比较少,对于SQL查询语句,复杂视图的的编写等操作,将体会不出SQL语句各种写法的性能优劣。但是如果将应用系统交付实际应用之后,随着数据库中数据的增加,系统的响应速度便会成为当前系统需要解决的最主要的问题之一。系统优化中一个很重要的任务就是对SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以高达百倍以上,可见对于一个系统的设计并不是简单地能实现其功能即可。就如何写出高质量的SQL语句,提高系统的可用性进行一些研究并提出一些具体优化的方法。   关键词: SQL语句;数据库优化;索引   中图分类号:TP3文献标识码:A文章编号:1671-7597(2011)0110020-01      0 引言   有关客服业务的系统受到SQL语句的影响非常大,在规模比较大的时候,往往因为一个小的SQL语句不够优化,导致数据库性能急剧下降,应用服务器断连、超时等各种恶劣的情况出现,严重影响业务的正常运行。因此,可以看出数据库的优化尤为重要。数据库的优化方法多种多样,在就其应用层来说,主要是基于索引的优化。本文根据实际的开发经验,在研发原来已有的方法的基础上,进行了一些扩展,总结了基于索引的SQL语句优化的一些方法。   1 有关索引的具体操作   优化数据库的基础就是建立必要的索引。这一点看似容易实际操作起来却有难度。其难点在于判断哪些是必要的索引,哪些又是不必要的。判断的最终标准是看这些索引能否对我们的数据库性能有所帮助。因为,索引虽然能够帮助我们提高数据库的执行效率,但是在另外一个层面上,索引又会占用我们的系统内存。因此,索引的使用与否就需要我们加以权衡。具体到方法上,就必须熟悉数据库应用程序中的所有SQL语句,从中统计出常用的可能对性能有影响的部分SQL语句,分析、归纳出在Where条件子句中出现频率较高的的字段及其组合方式作为主键和外键的那些键,其值唯一的那些键等等;在这些判断的基础上可以初步确定哪些表的哪些字段应该建立索引。其次,必须熟悉应用程序。必须了解数据操作频繁的表;经常与其他表进行连接的表;数据量可能很大的表;对于数据量大的表,其中各个字段的数据分布的详细情况等等。对于满足以上条件的这些表,需要加以重点关注,因为在这些表上的索引,将对SQL语句的效率及性能产生举足轻重的影响。根据上述情况的分析,现将建立索引常用的规则总结如下:   1.1 适合建立索引的情况   1)表的主键、外键;   2)数据量超过300的表;   3)经常与其他表进行连接的表,在其连接字段上应建立索引;   4)在Where子句中出现频率较高的字段,尤其是大表的字段;   5)在选择性较高的字段上。   1.2 不适合建立索引的情况   1)对于大的文本字段甚至超长字段;   2)复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替;   3)频繁进行数据操作的表;   4)对无用的索引尽量删除,以避免对执行计划造成负面影响。   以上总结了一些普遍的建立索引时的判断依据。总而言之,索引的建立必须认真考虑权衡,对每个索引创建的必要性都应该经过仔细分析,要有创建的依据。因为表中如果存在过多的索引以及不必要的索引对数据库系统的性能都毫无益处。在表上建立的每个索引都会增加内存的负担,索引对于插入、删除、更新操作也会增加处理上的时延开销。另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的效率,特别是对频繁更新的表来说,负面影响会更大。   2 数据库的优化技术   2.1 避免对列的操作   任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。   由于where子句中对列的任何操作结果都是在SQL运行时逐行计算得到的,因此它不得不进行表扫描,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表扫描。   2.2 尽量去掉“IN”、“OR”等关键字   含有“IN”、“OR”关键字的Where子句常会使工作表及索引失效;如果不会产生大量重复值,可以把子句拆开;然后将索引创建在拆开的子句中。   2.3 尽量去掉 “”   尽量去掉 “”,避免全表扫描。如果数据是枚举值,且取值范围固定,则修改为“OR”方式。   2.4 去掉Where子句中的IS NULL和IS NOT NULL   Where字句中的IS NULL和IS NOT NULL将不会使用索引而是进行全表搜索,因此需要改变查询方式,分情况讨论等方法,去掉Where

文档评论(0)

erterye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档