SQL查询语句的优化 SQL查询语句的优化

SQL查询语句的优化

  • 期刊名字:新乡教育学院学报
  • 文件大小:302kb
  • 论文作者:茹蓓
  • 作者单位:华中科技大学
  • 更新时间:2020-09-29
  • 下载次数:
论文简介

第19卷。第4期新乡教育学院学报Vol. 19,No.42006年12月JOURNAL OF XINXIANG EDUCATTON COLLECESQL查询语句的优化茹蓓(华中科技大学控制科学与工程系,湖北武汉430079)摘要:目前数据库 面临的主要问题是SQL查询语句的优化,通过使用索引、提供冗余搜索参数避免相关子查询等方法,可以有效的提高系统性能。关键词:数据库;SQL;查询语句;优化方法中图分类号:TP311文献标识码:A文章编号16723520040085-02越来越多的软件开发是基于数据库进行的,而数据库中询语句中索引项sno、cno没有包含WHERE子句中的grade主要是使用SQL查询语句来获得信息。随着数据库中数据项 ,那么就不会利用索引项来提高查询速度。可以通过在的增加,查询语句的优化就成为系统需要解决的最重要的问WHERE子句后增加' Sno IS NOT NULL'这样的永真条件把索题。现在很多用户使用SQL Sever的查询优化器来改进系统引项引人查询中,形成索引覆盖,提高执行速度。性能,”但是使用查询优化器并不能智能化的自动编写SE-(二)提供-些冗余的搜索参数LECT语句,那么编写查询语句的任务还是要由编程人员来-般支持SQL语言的大型关系数据库都需要使用一个完成。在相同的查询条件下,可以有多种不同的表示方式,基于成本的优化器,为即时查询提供- -个最佳的执行策略。而在数据库中不同表达方式运行的速度是截然不同,劣质的优化器通过查询语句提供执行策略,采用查询策略可使系统查询语句与优化的查询语句之间的速度差别甚至可以达到性能大大提高。几十倍,所以编写SELECT语句的优劣会直接影响系统的性在多个表连接查询时,应当提供-些冗余的搜索参 数,能。设计人员可以通过多种方法来优化编写SELECT查询语使优化器有更多 的选择余地。句,从而提高查询速度。例如, 0] SELECT student. sudent. name, student. course.-优化方法course . id, student_ course. grade FROM student, student _ course(一)合理设计并使用索引WHERE student. student. id= ‘g9940202' AND student. student_建立索引是加快表的查询速度的有效手段。”1用户可以id= student - course. student - id; SELECT student. student - name,根据情况创建聚集索引和组合索引。student_ course. course _ id, stodent . course. grade FROM student,聚集索引是指索引项的顺序与表中记录的物理顺序一student_ counse WHERE student. student _ id =‘e9940202' AND致的索引组织。因此,在聚集索引下进行范围查找时,根据student. student _ id = stadent - course. student _ id AND student_条件很容易就确定查找范围的起止点,然后只在确定的范圈course. student_ id= ‘g9940202' ;前面这两个查询语句作用是内扫描数据页就可以完成查询要求,避免了每次查询都必须相同的,但是后一个提供了更大的灵活性,便于查询。扫描表中所有的数据页,从而缩短了查询时间。但是并不是(三)避免使用相关子查询所有的表都适用聚簇索引,通常在下面几种情况下建立聚簇相关子查询是指子查询的查询条件依赖于外层父查询索引:表中列数据相对稳定、变化不频繁;使用BEIWEEN、的某个属性值。相关子查询的内层查询与外层查询有关,所<.< =.>i.> =谓词进行范围值的查询;频繁使用连接或以必须反复执行,对于外层查询的每-个元组都要进行一遍CROUP BY子句的查询列。内层查询的运算并且很可能当父查询的列值改变之后,子在多个列进行查询时,使用组合索引可以在表中确定数查询要重新查询一次。这样会导致大量的随机磁盘U0操据排序,减少数据查询的时间,提高查询效率。但是使用组作,使相关查询的效率较低,而且嵌套层次越多,效率越低。合索引时要注意必须将索引项覆盖查询。通常可以使用连接查询替代相关子查询;如果子查询不可避例如,在emo, cno项上建立唯-索引, SELECT CouNT免,那么要在子有询中过滤掉尽可能多的记录行。(*) FROM SC WHERE grade> 60 AND grade< 90 ;在这个查中国煤化工HERE EXIST(SELECTYHCNMHG收稿日期:006-05-22作者简介:茹蓓(1977-) ,女,河南新乡人,华中科技大学系统工程专业2006 级在读硕士研究生,平原大学信息工程学院讲师。研究方向:软件设计。8:新乡教育学院学报2006年* FROM SC WHERE student. smo= SC. smo);可以改为连接查60;这样,查询可以正常进行优化。询SELECT sname FROM student, SC WHERE sudent. sno= SC.(七)避免通配符“%”或“-"在LIKE谓词匹配串的首位sno;这样,可以省去扫描很多数据记录行。出现(四)避免使用不兼容的数据类型通配符“%”或"."出现在查询的匹配串首位时,系统不在查询语句的WHERE子句中出现的float.int.char和使用索引,这样就会降低sQL语句的执行速度。但是,当通varchar 型是不兼容的,数据类型的不兼容可能使优化器无法配符出 现在匹配串的其他位置时,优化器就可以利用索引提执行一些本来可以进行的优化操作。商执行速度。例如, SELECT sno, sname FROM student WHERE sage> 18;例如, SELECT sname FROM student WHERE sname LIKE在student表中, sage字段是字符型,而18是整型数,优化器‘%洋 ';的执行速度就不如SELECT sname FROM student无法对其进行优化,DBMS要先将18转化为字符型后才能与WHERE sname LIKE‘刘%洋’;的执行速度。sage字段比较。编程时,应将18转化成字符型的表示,即.(八)避免顺序存取“SELECT sno, sname FROM student WHERE sage>‘18'"。在嵌套查询中,对表的顺序存取对查询效率可能产生致(五)避免使用“<>”或“! =”或“NOrT这样的运算符命的影响。(I可以对连接的列进行索引,还可以使用并集“< >”是排斥性的操作符,不是包括性的操作符(1) ,这(UNON)来避免顺序存取。会使系统只能直接搜索表中数据,无法使用索引来确定将要例如,SELECT sno, sname FROM student WHERE (sage> 19命中的行数,从而降低操作速度。AND sdept= 'IS') OR sdep=‘CS' ;虽然有列的索引,但是系统例如, SELECT smo FROM student WHERE sage< > '20';还是顺序扫描整个表,所以要改进查询速度就要分离行的集SELECT smo FROM student WHERE sage! = '20' ;这两个查询合,使用UNION。我们可以将上句改为:“SELECT sno, sname执行时,不能使用索引,可以将上两句改为SELECT sno FROMFROM student WHERE (sage> 19 AND sdept= 'IS') UNION SE-student WHERE soge< °20' OR sage> *20' ;这样查询执行时,LECT sno,snamne FROM student WHERE sdept=‘CS'"。就可以利用索引缩小范围,提高速度。二、结束语与“<>"、“! ="类似,"“NOT* 谓词是查询中的否定形SQL查询语句的优化是在保证查询结果正确的前提下,式,“NOT"使用时,对应要否定的内容用括号括起来,NOT谓通过使用优化器、充分利用索引、减少表的扫描UO次数、减词放在括号的前面,在查询时先运算括号中的内容,然后运少数据转换的进行、减少传送数据量等方法提高系统性能。行外面的NOT运算。那么这种运算也不能完成优化的任务,所以在编程时尽量避免使用“NOT”操作符。参考文献:(六)避免在WHERE子句的条件参数中使用函数或数学运算符[1]微软公司.数据库程序设计[M].北京:高等教育出版社,WHERE子句中的条件表达式是为查询提供判断依据2004:485.的。如果条件表达式包含了字符串函数或数学操作符,那么[2]王 珊,陈红.数据库系统原理教程[ M].北京:清华大优化器就不能使用分布系统统计信息,这样也会影响查询速学出版社,2002:71.度。[3]朱如龙sQL Server 数据库应用系统开发技术[M].北京:例如,①SELECT smo FROM student WHERE SUB2STRING机械工业出版社,2004:141.(snane,1,1)=‘刘' ;②SELECT sno FROM SC WHERE gade/10[4]高天迎. SQL语句的优化[J].天津理工学院学报,2003,> 6;这两个查询语句都不能进行优化,可以在相同查询要求(3).下将这两个语句改为:①ELECT smo FROM student WHEREsname LIKE刘% ' ;②SELECT sno FROM SC WHERE grade >[责任编校郭涛]Optimization Methods of SQL Query LanguageRU Bei(Huazhong University of Science and Technology , Wuhan 430079 ,China)Abstract:At the present time ,SQL optimization is the mai中国煤化rticle itoduee eandanalyses some methods to optimize the SQL, which include propeFlata, avoiding fomaltranformation, etc. These methods can improve the eficiency of sTYHCNMHGKey words: database; SQL; query language; optimization methods防数据

论文截图
版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。