数据库查询优化浅析.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文档。上传文档
查看更多
数据库查询优化浅析.doc

数据库查询优化浅析   摘 要:在飞速发展的信息化时代,随着计算机技术的普及,数据库成了一种非常重要的信息存储工具。在以数据库为核心的应用系统中,查询操作最为频繁,而实现快速有效的查询对数据库的性能有直接的影响,为了提高数据库系统的性能,就需要对查询进行优化,而本文主要探讨了在实际应用中数据库查询优化的若干策略。   关键词:关系型数据库;查询优化;SQL   中图分类号:TP311.13   众所周知,数据库系统是管理信息系统的核心,伴随着数据库技术越来越成熟,数据库成为了现代计算机信息系统和计算机应用系统的基础乃至核心。从数据库的各种操作的统计中可以得知,查询操作所占的比重是最大的,而select语句在所有的SQL语句中代价最大。如果在查询过程使用合理的查询策略,就能够大大降低查询时间,提高查询效率,从而提升整个数据库系统的性能。由此可见,查询优化在数据库中的重要性。   1 合理的使用索引   索引的概念:索引是对数据库表中一个或多个字段的值进行排序的一种数据结构,使用索引可以快速访问数据库表中的特定数据。数据库索引就好比一本书的目录,能加快数据库的查询速度,索引又分为聚簇索引和非聚簇索引,聚簇索引是按照数据存放的物理位置为顺序,而非聚簇索引则不是。聚簇索引能提高多行检索的速度,非聚簇索引对单行检索很快。   索引的使用原则:(1)在频繁建立连接,但是没有指定为外键的字段上使用索引。在连接次数较少的字段上由优化器自动生成索引;(2)避免在条件表达式中频繁用到的不同值较少的字段上建立索引,反之在不同值较多的字段中应该优先考虑建立索引;(3)在经常性的进行分组(group by or order by)或排序的属性上使用索引;(4)如果有多个字段需要排序,则可以使用复合索引。   2 避免或简化排序   不合理的排序对数据库查询的性能影响很大,特别是在数据量很大的情况下,这种影响愈加明显。所以对于大型表而言,我们应该尽量避免或者简化重复的排序。当利用索引自动的以适当的次序产生输出时,则优化器可以避免适当的步骤。   3 消除对大型表记录的顺序存取   在嵌套语句中,表的顺序存取对查询效率可能会产生相当大的影响。比如采取了顺序存取策略,在一个有两层嵌套的查询语句中,若每层都有10000行,那么查询需要执行1亿行数据,对于数据库而言,这是相当繁重的任务,为了避免这种情况,可以对连接的字段建立索引。   4 避免相关子查询   子查询的效率一般没有连接查询高,应该尽量用连接查询来代替子查询。除非必要,一般不要写有子查询的语句,如果必须用子查询的时候,在子查询里写尽量多条件,使得子查询返回的行数尽量少。   5 操作符的正确使用   在SQL语句中每一个操作符都有其特定的用处,应该尽量使用运算开销较小的运算符。(1)union和union all的使用。Union和union all都有合并数据集的功能,但如果仔细考虑就会发现,union在合并数据集时,会把相同的记录合并,而union all没有此功能,所以相对而言union all的开销较小,在两个数据集没有相同记录时用union all比union效率要高;(2)避免使用in关键字,因为in关键字的开销较大。   6 避免困难的正则表达式   有些关键字如matches和like都支持通配符匹配正则表达式。但这种匹配相当耗时。例如:selcet*from student where id like--”即使在id字段上建立索引,此种情况下依然采用顺序扫描方式。如果把语句改成selcet*from student where id,在执行查询时用索引来查询,明显会大大提高效率。   7 使用本地表   本地表是指把远程数据库中的相关数据下载到本地小型数据库中(如access、paradox),以克服网络通讯带来的障碍。但是本地表也有缺点:首先,在客户端上必须要配置一个数据库,这为客户造成了不必要的麻烦;第二,本地表的使用,使得不同的用户看到的信息不一致;第三,本地表无法保证实施性,数据库中的改变要重新下载之后,才能在本地表中生效。所以只能在权限管理这样的特殊场合才能使用。   8 使用临时表加速查询   将某一张表的子集进行排序并创建临时表,可以大大提高查询效率。如果一个查询要被执行多次而不止一次,可以把查询的结果找出来放在一张临时表中,并按查询要求进行排序。因为临时表中的记录肯定少于主表中的元组,物理顺序就是所要求的顺序,减少了I/O操作的数量,还有助于避免多重排序,而且在其他方面还能简化优化器的工作。从而提高了查询的效率。如:select   Student.name,pay.bala

文档评论(0)

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

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

1亿VIP精品文档

相关文档