关系数据库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查询的优化方案主要从优化原理、视图、WHERE子句、存储过程等,并结合实例阐明和验证。对优化查询的掌握,可使学生在数据库应用程序设计方面的课程中更能得心应手 关键字:优化查询;SQL查询;关系数据库 数据库查询操作是数据库操作的核心操作,对数据的查询效率及处理速度已成为衡量数据库性能的一个重要指标。数据库查询技术也是学生对《数据库原理与应用》这门课程所必须掌握的知识和技能,数据库查询技术的精通也为以后课程的学习(如:C#.NET程序设计)中的数据库应用程序的设计打下良好的基础 为了优化数据库的性能,简单、有效的方法就是优化查询 1优化原理和实质 数据查询处理的代价通常取决于对磁盘的访问,因为磁盘比内存的访问速度要慢。对于一个给定的查询,有许多可能的处理策略,复杂查询更是如此[1]。查询优化的实质是在结果正确的前提下,找出与已有表达式等价,但查询效率更高的表达式 2在教学中要注重的几种典型的优化方法 2.1建立视图 视图可简化用户操作数据的方式,使用户能着重于所感兴趣的特定数据和所负责的特定任务。如果该视图数据规模小于定义的基本表,则基于视图的查询比原查询的速度会快得多 例:要查询每门课程成绩最高的学生的学号 SELECT 学号,课程号,成绩 FROM 成绩表 A WHERE 成绩=(SELECT MAX(成绩) FROM 成绩表B WHERE A..课程号=B.课程号) 语句缺点:这属嵌套查询,子查询的结果集将作为外层查询的条件,查询效率不高 解决方案:可先建立视图,求得每门课程的最高分,再与成绩表中比较,获取与视图中最高分数据相等的记录,这就减少了内层连接的数据量,从而提高了检索速度 用SQL语句优化的步骤为: 首先,创建视图 GREATE VIEW V_max_cnoscore AS SELECT 课程号,Max(成绩) AS 最高分数 FROM 成绩表 GROUP BY 课程号 其次,利用视图检索数据 SELECT 学号,A.课程号,A.成绩 FROM 成绩表A,V_max_cnoscore B WHERE A.成绩=B.最高分数 AND A.课程号=B.课程号 2.2查询条件Where子句的优化 2.2.1合理设置WHERE条件的先后顺序。多数数据库都是按从左到右的顺序处理条件,把能过滤更多数据的条件放在前面,过滤少的放后面,便可提高检索速度 例:SELECT * FROM student WHERE ssex=女 --条件1过滤的数据较少 AND sdept=计算机系 --条件2过滤数据比条件1多 上面的SQL就不符合上述原则,可改为: SELECT * FROM student WHERE sdept=计算机系 AND ssex=’女 对同一表格进行多个选择运算,选择条件的排序对性能有较大影响,不仅影响索引的选取,而且关系到临时表的大小[2]。因此,要提高查询速度,可将较严格的条件写在前面,较弱的放在后面 2.2.2避免使用“”或“NOT”操作符。“”或“NOT”均属于排斥性操作符,不是包括性操作符,这会使系统在搜索数据时无法使用索引,只能直接搜索表中的数据,例: (1)SELECT 学号 FROM 成绩表 WHERE 成绩80 (2)SELECT 学号 FROM 成绩表 WHERE NOT(成绩80) (3)SELECT 学号 FROM 成绩表 WHERE成绩80 比较以上三条语句,可知第3条可使用索引查询,它的查询速度最快 2.2.3恰当运用“OR扩展”技术。该技术是把在Where子句中带有OR的查询转换成包含多个UNION ALL的查询 例:查询计算机系县年龄不大于XX年龄=′A′AND图书类号=90) 语句缺点:需要搜索学生表的每一行,来查找所有满足子查询条件的记录 解决方案:将学生表作为连接的内表,查询将作为通常的连接来执行 优化后的SQL语句: SELECT 姓名FROM (SELECT 学号 FROM 成绩表 WHERE成绩=90) A,学生表 B WHERE A.学号=B.学号 2.4善于使用存储过程 存储过程是SQL语句和可选控制流语句的预编译集合,一个名称存储并作为一个单元处理。善于使用存储过程,将使SQL变得更加灵活和高效 例:查询某个学生某门课程的考试成绩,列出学生的姓名、课程名及成绩 CREATE P

文档评论(0)

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

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

1亿VIP精品文档

相关文档