浅谈SQL查询语句优化策略

时间:2022-06-09 09:16:14

中图分类号:TP311.13 文献标识码:A 文章编号:1007-0745(2014)04-0245-01

摘要: 在关系数据库系统中,sql是关系数据库的标准语言,其中SQL查询操作语句在SQL语言中所占比重最大,因此,本文首先介绍了SQL语言,接着讲述了SQL查询语句的执行过程,最后就如何优化SQL查询语句进行了研究,总结并提出了5种具体的优化方法。

关键词:数据库 SQL 查询语句 优化

引言

随着Internet的飞速发展,数据库作为信息管理系统的后台,广泛地应用于各企事业单位,主要负责信息的存储和处理,具有不可替代的地位。在数据库系统的各种操作中,数据库的查询操作是其核心操作,是最关键的,也是最复杂的,评价数据库的一个重要的性能指标就是查询操作的响应速度,因此查询操作对数据库的推广与应用会产生直接的影响,对数据库查询语句进行优化是很有必要的。

1、SQL语言概述

1.1 SQL的基本定义

SQL(Structured Query Language),即结构化查询语言,是关系数据库的标准语言,SQL还是一个功能极强的、通用的关系数据库语言。

1.2 SQL的产生与发展

SQL是Boyce和Chamberlin在1974年提出的,并且在IBM公司研制的关系数据库管理系统原型System R上实现。由于SQL具有简单易学的特点,一经推出,便深受广大用户的喜爱,又经过各大公司的不断修改、扩充和完善,最终得到了业界的认可。在1986年10月,SQL成为关系数据库语言的美国标准。

1.3 SQL的特点

SQL集数据操作、数据查询、数据控制和数据定义功能于一体,主要特点包括:①综合统一;②高度非过程化;③面向集合的操作方式;④以同一种语法结构提供多种使用方式;⑤语言简洁,易学易用。

2、SQL查询语句执行过程

提交一条SELECT语句后,数据库从该语句出发,直到获得所要查询的结果,需要一个处理过程,这个过程叫做查询处理。数据库查询语言的处理过程主要分为四步:一、客户端把语句发送给服务器端执行;二、解析语句:①查询高速缓存;②检查语句合法性;③检查语言含义;④获得对象解析锁;⑤核对数据访问权限;⑥确定最佳的执行计划;三、语句执行:①如果数据不在缓冲区,服务器进程将从数据库文件中查询相关数据,并将数据放入缓冲区;②如果数据在缓冲区,服务器将数据直接传递给客户端;四、提取数据。

3、SQL查询语句优化原因

第一、SQL查询语句是对数据库进行操作的重要途径,它的效率对数据库系统的性能起着决定性的作用。

第二、SQL查询语句独立于应用程序设计,具有较高的逻辑独立性,对SQL查询语句进行优化,不会对应用程序造成任何影响。

第三、SQL查询语句可以有许多不同的写法,写法的不同可能会造成很大的性能差异。

4、SQL查询语句优化策略

4.1 避免对WHERE子句中的条件参数使用运算符

WHERE子句中任何对列的操作都有可能导致全表扫描,并且优化器不能使用分布系统统计信息,那么查询时需要花费计算表达式的时间。如:

SELECT sno FROM SC WHERE score*10> 600

改写为:

SELECT sno FROM SC WHERE score> 60

第二种方式相对于第一种方式减少了计算表达式的时间,相对较快。

4.2避免使用“!=”、“”,“not”等负逻辑操作符

“not”操作符可以用来取反,但是一旦使用了“not”操作符,查询时就不能使用索引。同样,在使用与“not”操作符有同样效果的“”运算符的时候,也不能使用索引,只能直接顺序扫描表中的数据,会大大降低查询效率。

4.3避免使用正规表达式

所谓正规表达式,是指在 SELECT 查询语句中 LIKE 关键字支持的“_”和“%”通配符的使用。一旦采用谓词LIKE时,如果以“%”或“_”等通配符开始,则SQL不能使用索引,例如:

SELECT * FROM student WHERE birthday LIKE ’1994%’

虽然建立了索引,但是仍旧采用顺序扫描的方式。因此,为了能够使用索引,可以将其改进为:

SELECT * FROM student WHERE birthday>’1994’ AND birthday

第二种方式较之第一种方式,由于可以使用索引,因此效率将会有很大幅度的提高。

4.4 避免使用一些相互不兼容的数据类型

在查询语句中,WHERE子句中可能会出现不同的数据类型进行比较,例如money与int,float与int,varchar与char,但它们之间相互并不兼容,DBMS需要将不兼容的数据类型转换成相互兼容的数据类型,会耗费一定的时间,因此要求WHERE子句中出现的数据类型是兼容的,数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。例如:

SELECT name FROM sales WHERE cost > 30

在这条查询语句的WHERE子句中,由于字段cost是money型,而30是int型,优化器无法对其优化,只有RDBMS消耗一部分时间将30转化为money型,才可以进行比较。因此,为解决这种问题,应避免使用不兼容的数据类型,可以将上述查询语句改为:

SELECT name FROM sales WHERE cost> 30.00。

4.5避免嵌套查询层次过高

由于SQL语言允许多层嵌套查询,且嵌套查询具有易于构造,层次清楚,结构化的优点,因此,程序员或用户在查询时一般喜欢使用嵌套查询,但是应该避免过深的嵌套,如果一个字段同时在主查询和WHERE子句中的查询中出现,那么一旦主查询中的字段值发生改变,子查询可能会重新查询一次。因此查询嵌套层次越多,查询效率越低。

5、结语

综上所述,SQL查询语句优化是一项相对比较复杂的工作,SQL查询语句的优化策略很多,本文只列举了较为常用的五种,SQL查询语句的优化质量对整个系统的效率具有相当大的影响,因此我们在使用时,应该根据具体情况综合考虑,在保证查询结果正确的前提下,选择合适的策略对查询语句进行优化,这样才能充分发挥数据库的高效功能,为应用程序提供高性能的服务。

参考文献:

[1]朱敏英.数据库SQL查询语句优化研究[J].信息与电脑,2013(6).

[2]何满辉,温廷新,曲晓华.SQL的查询速度优化方法[J].辽宁工程技术大学学报,2003(2).

[3]张欣.基于SQL标准的关系数据库查询优化技术研究[J].煤炭技术,2011(12).

上一篇:论高职院校计算机组装与维护课程的教学改革 下一篇:供求信息 2期