大型數据库的优化查询.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文档。上传文档
查看更多
大型數据库的优化查询

第 PAGE 1页/共 NUMPAGES 4页 结合索引优化SQL语句提高数据库查询效率 任立群 (聊城市人民医院 信息科,山东 聊城 252000) 摘 要 在一个应用系统中,对数据查询及处理速度已成为衡量该系统成败的标准,所以在对大型数据库查询时,应注意数据查询的工作效率,以免造成系统资源严重浪费。本文根据以语法为基础的查询优化器的工作原理,合理建立索引,书写规范良好的SQL语句,使用合适的表达式或关键字,充分利用索引,避免全表扫描,提高查询效率。 关键词 数据库,优化查询,索引,SQL语句 数据库系统是管理信息系统的核心,基于数据库的联机事务处理(OLTP)和联机分析处理(OLAP)是各使用单位最为重要的计算机应用之一。从大多数系统的应用实例来看,查询、分析、统计是系统的最终应用,而查询、分析、统计操作所基于的SELECT语句在SQL语句中又是付出资源代价最大的语句。举个具体的例子,比如一个数据库表有上百万甚至上千万条记录,全表扫描一次往往需要数十分钟,甚至数小时。如果采用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟甚至几秒钟,由此可见查询优化技术的重要性。本文以应用实例为基础,结合数据库操作(以MS SQL Server为例),介绍优化查询技术在现实系统中的运用。 1 大型数据库查询的工作原理 一个好的查询计划往往可以使程序性能提高数十倍。查询计划是用户所提交的SQL语句的集合,查询规划是经过优化处理之后所产生的语句集合。DBMS(数据库管理系统)处理查询计划的过程是这样的:在做完查询语句的词法、语法检查之后,将语句提交给DBMS的查询优化器,优化器做完代数优化和存取路径的优化之后,由预编译模块对语句进行处理并生成查询规划,然后提交给系统处理执行,最后将执行结果返回给用户。在实际的数据库产品(如MS SQLServer)的高版本中都是采用“基于语法的查询优化器”和“基于开销的查询优化器”。“基于语法的查询优化器”为获得对 SQL 查询的应答结果创建一个过程计划,但是它选择的特定计划取决于查询的确切语法及查询中的子句顺序。无论数据库中记录的数目或组合是否随时间变化而更改,基于语法的查询优化器每次都执行同样的计划。与基于开销的查询优化器不同,它不查看或维护数据库的统计记录。“基于开销的查询优化器”在备选计划中选择应答 SQL 查询的计划。选择是基于对执行特殊计划的开销估算(I/O 操作数、CPU 秒数,等等)而作出的。它通过记录表或索引中记录的数目和构成的统计数字估算这些开销。与基于语法的查询优化器不同,它不依赖于查询的确切语法或查询中的子句顺序。虽然现在的数据库产品在查询优化方面已经做得越来越好,但由用户提交的SQL语句是系统优化的基础,很难设想一个原本糟糕的查询语句经过系统的优化之后会变得高效,因此用户所写语句的优劣至关重要。“基于开销的查询优化器”的优化方法我们暂不讨论,下面重点说明“基于语法的查询优化器”的解决方案。 2 合理建立索引提高查询效率 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。采用索引来加快数据处理速度也成为广大数据库用户一致接受的优化方法。索引的使用要恰到好处,其使用原则如下: 2.1 在经常进行连接,但是没有指定为外键的列上建立索引。 2.2 在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。 2.3 在条件表达式中经常用到的不同值较多的列上建立索引,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就没有必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。 2.4 如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。 2.5 不能用null作索引,任何包含null值的列都将不会被包含在索引中。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。 2.6 对查询型的表,建立多个索引会大大提高查询速度,对更新型的表,如果索引过多,会增大开销。 在实际应用中可以使用系统工具帮助分析建立索引。如MS SQL Server的查询分析器。 3 避免或简化排序(order by) 应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。以下是一些影响因素: 3.1 索引中不包括一个或几个待排序的列; 3.2 group by或order by子句中列的次序与索引的次序不一样; 3.3 排序的列来自不同的表。 为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得

文档评论(0)

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

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

1亿VIP精品文档

相关文档