

SQL查询思路优化与语句优化
- 期刊名字:科教文汇
- 文件大小:503kb
- 论文作者:林丽贞
- 作者单位:广州市轻工高级技工学校
- 更新时间:2020-09-29
- 下载次数:次
201205(下旬刊)SQL查询思路优化与语句优化林丽贞(广州市轻工高级技工学校广东.广州510220)中图分类号:TP393.09文献标识码:A文章编号:1672- -7894(2012)15- 0079- -02摘要数据库查询优化是取得良好执行性能并简化管理2.1创建索引的关键因素,SQL查询是一个有序的查询,不同语句的使用在关系数据库系统的表上建立合适的索引,可以避免和使用顺序将直接影响其查询速度。查询速度的快慢直接表扫描并减少因查询而造成的I0开销,极大地提高了查询影响着数据库的推广与应用,本文就优化思路及语句书写的执行速度。索引一般分聚集索引和非聚集索引两种,-个优化两方面进行讨论,提出优化方法及语句实现。表可以有多个非聚集索引,但只能有一个聚集索引。索引虽关键词SQL 查询思路优化 语句优化有助于提高性能,但并不是索引越多越好,恰好相反,过多The Approach and Statements of Optimization in SQL的索引会导致系统低效,因为用户在表中增加-一个索引,维Inquiry // Lin Lizhen护索引集合就要做相应的工作,同时每次有数据改变的时Abstract Database inquiry optimization is a key factor to ach-候就需要维护索引。ieve good execution performance and simplify management.SQL常用方法是对于主键列、经常有范围查找和orderby或inquiry is an ordered inquiry. The use of different statements.group by的列可以考虑建立索引。具体的实现可以参考如下and sequential order will directly affect the inquiry speed,whi-表ch has a direct impact on the promotion and application of the列的特征描述聚集索引非聚集索引database.The article focuses on two aspects of the study,the ap-主键列应该使用proach and statements made in optimization,which puts forward外键列the methods of optimization and statements to achieve.Key words SQL inquiry;the a pproach of optimization;the频繁更新的列不应该使用statements of optimization大数目的不同值Author's address Guangzhou Senior Light Industry Technical小数目的不同值School,510220,Guangzhou,Guangdong,China一个或极少不同值不应该使用不应该使用1引言经常要求返回某范围内的数据随着IT技术高速发展,互联网已渗透至千家万户的今列经常被分组的排序天,数据库作为信息管理系统的后台,广泛应用于各企事业2.2 SQL语句书写的优化单位,主要负责信息的处理和存储,有着举足轻重的地位。用户提交- -条SQL语句,系统进行四步操作,从SQL执数据库设计的重要标准之一就是查询速度, 查询速度的快行的原理分析,要想提高SQL语句的执行效率,必须SQL语慢直接影响着数据库的推广与应用。而SELECT语句作为句书写规范和技巧。SQL语句的优化原则是尽可能减少查SQL中的核心,具有非常丰富的成分和强大的查询功能,也询中参与加工的数据量,以此达到优化空间和时间。如何找是使用最为频繁的语句之一- 。据统计,约有90%的系统性能出一个与之等价的且占用资源更少的表达式是教学select问题是由于程序员或用户使用了不恰当的查询语句造成语句的关键。以下笔者从4个方面探讨语句优化:的,所以优化数据库系统的SQL查询语句就显得非常重要。2.2.1尽量使用单表操作本文以教学管理系统为例,就查询思路优化及语句书写优在查询过程中能在-一个表中找到的字段,尽量使用单化方面进行探讨。表,不应该涉及多表连接查询。因为多表连接查询,势必要教学管理系统的三个关系模式为:做笛卡儿积操作,所以会增加检索的时间。例如,查询学号stud(sno, sname , ssex, sprof , sbithday );为“1001”学生选修的课程成绩,可以书写成“Select sno,scoreclass(cno,cname,credit);from stud,sc where stud. sno=sc. sno and sno=' 1001'”,但此sc(sno,cno,score)。查询中涉及sno(学号)和secope(成绩)两个字段,在sc表中2 SQL查询思路优化都有,所以SQL中国煤化工from sc where查询优化关注的问题是怎样省空间、省时、提高效率,sno=' 1001'”。YHCNM HG优化SQLServer性能的方法很多,可以从语句书写、创建索2.2.2尽量列出查询字段名引等方面考虑,但提高速度最快的方法就是索引。在查询过程中,每减少提取一个字段,查询速度就会有种敏文i6 79.201205(下旬刊)相应的提升,所以查询时要精确写出每个属性,全属性也不索引扫描。在实际应用中可以根据情况使用大于或小于表例外,即避免书写“select * from’这样的语句。达式来实现不等条件。例:查询成绩不等80分的学号,姓2.2.3尽量减少格式转换和函数应用名,课程号,成绩的语句为“selet A.学号,姓名,课程号,成绩查询时如果非格式转换不可的话,那么在语句书写时from选课表A,学生表B whereA. 学号=B.学号and成绩也要尽量减少格式转换次数。例,在stud中设置sbithday为<>80”,可以用语句“elect A.学号,姓名,课程号,成绩from选字符型数据,现需查询1997到1999年出生的学生信息。课表A,学生表B where A.学号=B.学号and (成绩<80 or成语句1:select sno,sname,ssex,sprof,sbirthday from stud绩>80)”代替前-句。where cast (bithday as datetime) between 1997-01-01' and2)exists与in的使用'1999-12-31'in语句相当于hash连接,性能低于任何连接查询语句;语句2: select sno,name,sex.sprof,sbirthday from studexists 则是对外表作lop循环,每次lop循环再对内表进行where sbirthday between cast (1997-01-01 as datetime) an查询。当查询的两个表大小相当时,in与exists执行效率相cast(1999-12-31' as datetime)当;如果目标表记录明显少于子查询表记录,则用exists较在语句1中需要对stud表中每--行记录的日期都转换优用in。一次,而在语句2中只需要对常量'1997-01-01'、3)用union代替or条件1999-12- 31'做格式转换,所以语句2执行的速度要快于语如果在学生表中,性别与专业两上字段创建索引,那么句1。使"“elect * from学生表where 性别='男'or专业='计算机同时,尽量避免在where字句左侧出现函数表达式或运”进行查询,只能全表扫描,达不到查询优化,这时可以采用算表达式,因为此种情况只能在语句执行过程中进行全表扫“select * from学生表where 性别='男' union select * from学描,并且需对目标表逐个记录执行函数或运算,极消耗性生表where 专业='计算机”,提高查询效率。能。4)子查询的转换2.2.4多表查询优化策略及优化书写一个列同时在主查询和WHERE子句中的查询中出(1 )使用内连接多表查询中,如果完成相同任务时,既可以使用内连接现,那么当主查询中的列的值发生变化后,子查询必须重新也可以使用外连接,那一定要使用内连接,因为内接连的效查询一次。子查询嵌套层数越多,查询效率越低,这种情况率明显高于外连接。例,查询教学管理系统中学生选修课程可以采用内嵌视图的方式或连接查询方式提高查询效率。例:查询成绩70以上学生的姓名,可以将查询语句“se-的信息,可以完成此功能的语句有:lect 姓名from学生表where 学号in (selet 学号from 选课表语句1:select A.学号,姓名,C.课程号,课程名,成绩from课程表where 成绩>=70)’改为“selet姓名from (select学号from 选C inner join选课表B on B.课程号=C.课程号inner join学生课表where成绩>=70)A ,学生表B where A.学号=B.学号”,或改为“select姓名from 学生表A,选课表B where A.学号表AonA.学号=B.学号=B.学号and成绩>=70"。语句2:3总结C left join选课表B on B.课程号=C.课程号left join学生表A程序设计中有80-20的原则,即20%的代码消耗了onA.学号=B.学号80%的资源,这个原则同样适用于数据库查询语句,因此数其中,语句1是较优选择,其采用内接连,执行效率最据库查询的主要优化目标是找到并优化这20%的代码。优高。化查询的方法很多,在使用中,要根据具体情况权衡利弊,(2 )where与having的应用使数据库查询性能最优。在教学中要培养学生根据具体的on与where、having均可以加条件,但on最先执行,情况具体分析的能力,同时要让学生养成编写规范、优化的where次之,having最后。语句书写时尽量使用where代替SQL语句的习惯。having, 且做到先筛选后连接,选择记录条数最少的表作为基础表,当SQL处理多个表时,会运用排序及合并的方式连参考文献接它们。首先扫描第- -个表(FROM 子句中最后的那个表)并[1]马军,李玉林.SQL语言与数据操作技术大全[M].北京:电子工业对记录进行排序,然后扫描第二个表(FROM子句中最后第出版社,2008.二个表),最后把从第二个表中检索出的记录与第-一个表中2]景慎德SOL查询优化的策略与技巧J],福建电脑2009(10).匹配记录进行合并。假设学生表记录少,选课表记录多,现[3] 雷琳武汉船舶职业技术学院学报2011(3).需查询出男生的总分,最优化实现语句为:[4]魏琦,于林林,宋旭东.关系数据库查询优化策略研究[J].电脑知识select性别,sum (成绩) as总分from选课表A,学生表B与技术,2010(6).where性别='男'and A.学号=B.学号group by性别[5]徐丽媛,张亚宾基于SOL Server 数据库查询优化的几点思考[].(3)条件应用优化科技信息中国煤化工1)避免使用'=’与‘<>'操作符6]马李明,王I YHCNMH G高数据查询中的应在查询条件表达式中应尽量避免使用不等查询条件,用[J]电脑知出与技术,2008(20).为不等查询条件只能通过全表扫描来实现,无法使用任何编辑胡俊龙80种敌文i6 ..
-
C4烯烃制丙烯催化剂 2020-09-29
-
煤基聚乙醇酸技术进展 2020-09-29
-
生物质能的应用工程 2020-09-29
-
我国甲醇工业现状 2020-09-29
-
JB/T 11699-2013 高处作业吊篮安装、拆卸、使用技术规程 2020-09-29
-
石油化工设备腐蚀与防护参考书十本免费下载,绝版珍藏 2020-09-29
-
四喷嘴水煤浆气化炉工业应用情况简介 2020-09-29
-
Lurgi和ICI低压甲醇合成工艺比较 2020-09-29
-
甲醇制芳烃研究进展 2020-09-29
-
精甲醇及MTO级甲醇精馏工艺技术进展 2020-09-29