(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 语 句 优 化 原 则 数据库性能是整个应用程序性能的重要部分。数据库优化涉及的内容非常广泛,各类数据库都提供众多的性能指标和大量的优化工具。 下面我们简单介绍一下优化的基本概念。 一个运行良好的数据库至少应具有以下特点: 合理的物理结构及硬件能力 合理的物理结构指数据库文件及整个网络的物理分布。硬件能力指是否有足够的硬件资源来完成应用程序功能。合理的物理结构至少带来两个方面的好处: 适量的数据冗余,提高数据安全性。 平衡磁盘IO,增强数据读写能力。 而足够的硬件能力的作用自然不言而喻。一旦建立好数据库系统并开始运行,数据库的物理结构就不能改变。 合理的系统参数 对应数据库来说,随着数据量的变化,数据库性能也一直处在变化之中,因此数据库建立之初设定的系统参数会变的越来越不合适,有时甚至阻碍了数据库的正常运行,导致性能瓶颈。因此观察性能变化,随时调整系统参数,使数据库一直处于一个良好的运行状态,就成为管理员最重要的日常工作之一。对系统参数的合理调整,常常能将数据库从崩溃的边缘挽救回来。oracle、sqlserver这样的高品质数据库都为系统参数提供了灵活多变的调整方式。一般来说,只要数据库结构设计不存在重大缺陷,通过后期的调整,都可以使数据库运行在一个良好的状态下。 性能优良的sql语句 sql语句是在程序开发阶段就已经决定了的,由低效率的sql语句给数据库性能带来的问题,往往在数据库开始运行一段时间后才凸现出来(随着数据量的不断增加),但发现后就变的难以改变,成为不可突破的性能瓶颈。因此,作为一名合格的开发人员,应该建立基本的优化概念和良好的编程习惯,从整体上提高应用程序的质量。 同时,提高sql语句的执行效率,是提高整个数据库性能的最立竿见影且价格低廉的方法之一。因为几乎所有的数据库都会不可避免的运行一些效率低下的sql语句。对数据库性能的调整,往往都是从sql语句调优开始的。 下面我们简单介绍数据库是怎么执行sql语句的。 sql语句是唯一从应用程序发送到的命令。实例所做的全部工作就是接受、解释和执行 语句。基于规则的优化基于规则的优化基于规则的优化实例基于规则的优化SQL优化的实质就是在结果正确的前提下,用优化器可以识别的语句,充份利用索引,减少表扫描的I/O次数,尽量避免表的发生。使用索引:有大量重复值、且经常有范围查询(between,,,=,=)和order by、group by发生的列;使用最频繁的列使用最频繁的列组合索引。索引虽有助于提高性能但不是索引越多越好,恰好相反过多的索引会导致系统低效用户在表中每加进一个索引,维护索引集合就要做相应的更新工作索引。SELECT TOP $size$ BLOG_ID AS blogID, BLOG_DOMINO AS blogDomino, BLOG_TEMPLATE_ID AS blogTemplateID FROM blog WHERE BLOG_ID NOT IN (SELECT BLOG_ID from blog where BLOG_ID=$size$+$fromID$) AND LOCKED=1 ORDER BY BLOG_ID DESC; 通过查看执行计划,我们可以看到执行查询的步骤: 1、子查询中使用blog.pk_blog(主键索引)查询BLOG中满足blog=$size$+$fromID$的记录,这步占总成本的46%。 2、使用blog.pk_blog(主键索引),查询BLOG中满足LOCKED=1的记录。这步占总成本的44%。 3、使用Merge join。这步占总成本的10%。总成本为0.23。 我们可以看到两次对blog表的查询都使用了blog_id上的主键索引,同时表连接消耗的资源也比较少。应该说,对于子查询结构,这个查询的效率并不低。但是,这和下面的语句完全是等价的: SELECT TOP $size$ BLOG_ID AS blogID, BLOG_DOMINO AS blogDomino, BLOG_TEMPLATE_ID AS blogTemplateID FROM blog WHERE BLOG_ID$size$+$fromID$ AND LOCKED=1 ORDER BY BLOG_ID DESC; 总成本为0.0035。 优化器不是人工智能,在第一个查询中指定使用子查询结构,优化器就无法突破这个限制,尽管两个查询是相同的,优化器还是不能将第一种查询结构等价的转换成第二种。所以查询语句使用的结构对优化器影响重大,我们在进行多表查询等复杂情况的时候的时候(如可能需要使用联接查询、子查询、嵌套查询、group by等),应多进行一些考虑。一个原则是结构要尽量简单,这样在编译效率

文档评论(0)

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

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

1亿VIP精品文档

相关文档