设为首页收藏本站优领域

优领域

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
优领域 优领域 IT领域 数据库 其它数据库 查看内容

SQL Server数据库查询语句优化的研究

2014-5-8 15:43| 发布者: dzly| 查看: 249| 评论: 0|原作者: 罗云

摘要: 简要分析了影响查询执行速度的相关因素,并在此基础上研究了对SQL 查询语句进行优化的常用方法,包括数学 操作符、查询表达式等。

1 SQL Server 的概述

SQL Structured Query Language 的缩写,即:结构化查询语言。SQL 语言的主要功能就是同各种数据库建立联系从而进行操作查询处理。绝大多数流行的关系型数据库管理系统,如OracleMicrosoft SQL ServerAccess 等都采用了SQL语言标准。SQL Server 是微软公司开发的一款基于Windows操作系统的关系型数据库管理系统(DBMS),它是一个集成且端到端的数据解决方案,可以给企业用户提供安全、稳定和高效率的平台[1]

2 SQL Server 的优点

作为一种被广泛应用的数据库管理系统(DBMS),SQLServer 能够满足今天的商业环境要求和不同类型的数据库解决方案,具有许多显著的优点:易用性、集成性、可伸缩性以及用于决策支持的数据仓库功能等。此外,SQL Server 还为数据管理与分析带来了灵活性,这使得企业在快速变化的环境中从容响应,从而获得竞争优势。

3 SQL Server 优化器的优化策略

数据库管理系统(DBMS)完成查询连接操作都采用基于成本考虑的查询优化策略。DBMS 首先使用穷举法列出查询的所有可能的连接顺序,再从其中选择成本估计最低的策略。

由于查询执行策略的数目随参数和连接位数的增大而按指数规律增加,因此,即便采用了启发式算法执行搜索,选择最优者的系统开销也随之快速增长。显而易见查询操作对系统效率产生了严重影响。DBMS 优化器的输入为查询语句,输出为执行策略,即执行查询所需要的一系列步骤。此外,数据库的优化策略与查询表内容以及其他一些服务有关,如cache 大小和输入输出大小等。

4 SQL Server 查询语句的基本优化方法

随着数据库应用的扩大和深入以及数据的日益增多,数据库查询的性能问题愈加严重。而这些因素中比较常见的一点是程序员使用了不利于优化器处理的查询语句造成的。对于同一条查询来说,同一条查询语句可以通过不同的表达方法来实现,如使用子查询改为使用连接操作,而不同的表达式给数据库的反应速度带来比较严重的影响。一般的SQL 语句操作都与系统对象的索引项有关,系统存取页面的速度越快,SQL 语句的性能就越好。查询优化的目的即在于用最小的查询代价得到同样的查询结果。

4.1 数学操作符优化

4.1.1 查询中将BETWEEN 改为AND 连接的谓词

由于执行引擎对不同谓词的处理方法有所不同,因此不同的查询表达可以带来截然不同的执行效率。将逻辑表达式由使用BETWEEN谓词改为使用AND谓词,可以提高查询效率[2]。例如查询年龄在19 23 的学生:

SELECT * FROM Student WHERE Age BETWEEN 19AND 23

改为:

SELECT * FROMStudentWHEREAge>=19 AND Age<=23

4.1.2 查询中避免出现LIKE%

当采用谓词LIKE 时,如果以“_”或“%”等通配符开始就会导致SQL Server 无法使用索引进行查询操作。例如:

SELECT StudentName FROM Student WHERE Student-Name LIKE_明”

查询中应尽量避免这种语句的出现,而下列这条语句则不会影响查询速度:

SELECT StudentName FROM Student WHERE Student-Name LIKE”张%

4.1.3 查询中避免使用负逻辑

所谓负逻辑,指“!=”、“not exist”和“not in”等,任何负逻辑都会影响执行查询语句的速度,因为它们会导致对数据表的扫描,当表较大时,更是会对系统性能产生较大影响。例如:

SELECE StudentId FROMStudentWHERE StudentId !=11

这种查询语句将导致优化器无法通过索引来确定将要选择的行数因而影响查询执行效率,改为:

SELECE StudentId FROMStudentWHERE StudentId<=10AND StudentId>=12

4.2 避免使用子查询语句

当一个查询语句中使用子查询后,查询速度就会受到影响。查询嵌套的层次越多,查询效率就越低,因此应当尽量避免子查询的使用[3]。例如找出所有成绩大于60 的学生所在的班级:

SELECE Class FROM School WHERE Class IN(SELECEClass FROM StudentWHERE Score > 60)

这条查询语句先执行子查询然后执行外层查询。在School表中查询满足子查询条件的Class 记录。可以将School 表与Student 表进行连接来执行查询操作:

SELECT Class FROM School, Student WHERE School.Class=Student.Class AND Score>60

参考文献:

[1] 何玉洁,梁琦.数据库原理与应用教程[M].北京:机械工业出版社,2011,4:8-12

[2] 刘卫国,严晖.数据库技术与应用SQL Server[M].北京:清华大学出版社,2007,3:49-52

[3] 杜津玲.SQL Server 应用系统性能优化设计[J].电脑开发与应用,20093:73-75

 

网站统计|优领域|优领域 ( 粤ICP备12011853号-1 )  

GMT+8, 2019-10-18 21:57 , Processed in 0.038795 second(s), 12 queries .

Copyright © 2008-2014 优领域

回顶部