关于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语句 执行效率 方法   随着计算机技术的发展,各种各样的应用软件进入到我们的生活中。大多数软件在与用户交互时都会进行数据的查询、存储等操作。科学合理的数据库查询语句可以提高数据库的查询性能,随之将会提高软件的响应速度和用户体验度,在数据库应用系统中起着关键的作用。   1 SQL语句   SQL语句是STRUCTURED QUERY LAN -GUAGE的缩写,即结构化查询语言。在1986年10月通过了美国国家标准局的数据库语言美国标准,经过多年的扩展和标准化,在各种不同的数据库中已经基本达到通用。可以独立于数据库和计算机软硬件。   我们这里讨论的是结构化查询语言的一部分,叫做数据查询语句(Data Query Language)。数据查询语句也称为数据检索语句,用以从数据库表中获得需要的数据,返回给应用程序。数据查询语句中最常用的保留字是SELECT,其他的还有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字与其他类型的SQL语句一起使用。比如:   SELECT id,name,age,address FROM students WHERE name=’rose’ ORDER BY age   这条查询语句的意思是:从students学生表中查询出所有名叫rose的的学生,并且返回的结果集按照age年龄字段顺序排列。   2 SQL语句的效率   SQL作为查询语言有灵活的编写方式,语句的写法完全取决于编写者。当数据库收到一个查询语句时,首先完成语法解释,然后再进行编译,生成可以执行的“执行计划(execution plan)”。在语句编译过程中,数据库会根据指令内容和估算可能的执行计划,再根据每个计划的运行成本选择一个数据库认为成本最低的计划执行。数据库会把这些执行计划缓存在内存中,被称作执行缓存(plan cache)。以后遇到同样的语句时,数据库就可以使用同样的执行计划,而不用再次编译。   程序员在编写SQL语句时往往会陷入一种误区,那就是关注与SQL语句的执行结果而忽略了不同实现方法之间存在的性能的差异。对于相同的数据库结构来说,执行计划的成本消耗,完全取决于SQL语句的编写方式。这种实现方式的差异在大行或复杂的数据库中表现的更为明显。   经过实践发现,执行成本较高的SQL语句除了数据库设计不合理以外,不恰当的连接语句和不可优化的条件语句也是其中的主要原因。比如一条包含子查询的语句:   SELECT dd FROM A WHERE aa IN (SELECT aa FROM B)   在连接子查询中,效率的高低与使用IN还是用EXISTS有关。EXISTS会针对子查询表使用索引功能,IN会针对主表动用索引功能。可以确定,当主表数据量大时采用IN效率高,当子查询数据量大是采用EXISTS效率高。因此,SQL语句的执行效率和编写方法有直接关系。   下面简单说一下SQL语句的执行顺序:   FROM子句标识了需要查询的表,如果指定了表操作,会从左到右的处理,每一个基于一个或者两个表的表操作都会返回一个输出表。左边表的输出结果会作为下一个表操作的输入结果。   对于外连接(LEFT,RIGHT, or FULL),可以标记一个或者两个表作为保留表。作为保留表意味着这个表里面的所有列都被返回,即使它里面的数据不满足ON子句的过滤条件。 LEFT OUTER JOIN 把左边的表标记为保留表,RIGHT OUTER JOIN把右边的表作为保留表,FULL OUTER JOIN把两个表都标记为保留表。   WHERE过滤被应用到前一步生成的临时表中,根据WHERE过滤条件生成临时表。关于ON 和 WHERE 的区别需要在这里说明一下,ON 和WHERE 的主要区别在于 ON 是在添加外部列之前进行过滤,WHERE 是在之后,如果你不需要添加外部列,那么这两个过滤是相同的。   3 提高SQL语句效率的方法   为了提升SQL语句的执行效率,可以采用以下办法实现:   (1)在表中建立索引,在数据库中使用索引能够大大提高检索性能,这一点是非常明显的。用的索引越多,从数据库系统中得到数据的速度就越快。尽量在查询中明确需要的字段,减少使用类似于“SELECT name FROM TABLE1”这种查询语句。   (2)同时还需要注意一点就是要有效使用索引,并不是越多

文档评论(0)

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

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

1亿VIP精品文档

相关文档