APP下载

SQL server数据库查询优化探讨

2014-09-24薛亚

软件工程 2014年7期

薛亚

摘要:数据库最大的特点是查询的便捷性,几乎所有的数据库操作都是在查询的基础上进行的。查询优化提高了数据库的查询速度,也给数据的维护带来了方便。

关键词:SQL server;数据库;查询优化

中图分类号:TP315 文献标识码:A

Query Optimization of SQL Server Database

XUE Ya

(Changzhou Technical Institute of Tourism & Commerce,Changzhou 213032,China)

Abstract:Query convenience is the biggest characteristic of databse.Almost all database operations are performed on the basis of the query.Database query optimization can improves the query speed and bring convenicence to maintenance of datadbase.

Keywords:SQL server;database;query optimization

1 引言(Introduction)

在计算机技术和网络技术飞速发展的今天,互联网已经遍布了世界的各个角落,应用在各行各业当中,其中,数据库技术始终占有重要地位[1,2]。SQL server数据库系统是由微软公司推出的一种关系型数据库系统,是可扩展性强、高性能和为分布式客户机/服务器计算机所设计的数据库管理系统。SQL server数据库系统的应用十分广泛。

SQL server数据库系统要正常的运行,就必须对其进行日常的维护,在维护数据库系统时,必须要制定详细的维护计划,因为维护任务中最为重要的目标是降低系统发生故障的时间。SQL server数据库的维护工作非常重要,应该要引起数据库管理人员的充分重视,因为SQL server数据库系统的维护范围非常广泛,包括操作系统的维护、SQL server数据库系统的优化等。

2数据库查询优化技术概述(Introduce technology

of database query optimization)

在SQL server数据库系统中,每一次进行查询,数据库内核都需要使用优化器优化向SQL提交的数据操作。在优化过程当中,首先SQL要对句子能够进行优化作出判断,如果发现无法进行优化,那么就要扫描整个表格,如果可以进行优化,那么就会通过优化器来执行索引的选择。通过索引来判断能够使用的索引,并且评定每个句子的开销。下面对SQL server查询优化技术进行一下简单概述:

2.1 自动查询优化技术

SQL server的自动查询优化技术由基于开销的查询优化器来进行的,当提交一个SQL语句时,这个语句只是表明想要从数据库中得到什么样的结果,对于怎么样得到结果,SQL语句不会涉及。给予开销的查询优化器以CPU的使用率和磁盘I/O作为判断依据来为每个可能的执行规划赋予开销值,然后优化器会选择开销值最小的执行规划来执行。

2.2 索引技术

在SQL server数据库中,索引是一个物理性的数据库结果,是单独存在的,在检索数据的时候,对磁盘的读写都需要占用很大的开销,如果缺少了索引,就必须要对磁盘进行识别。有了索引的帮助,查询数据只需要索引页面就行,索引能够很大程度上提高查询检索速度。因此,要拥有查询方便快捷的数据库,索引是必不可少的。

2.3 存储过程的使用

目前,client/server应用程序已经被广泛使用。在网络中,SQL查询性能的一个很重要的体现就是如何最大程度上使用资源而减少流量。使用存储,目的是减少流量,提高速度。

2.4 使用面向对象的方法来实现SQL server查询优化

所谓的面向对象的查询方法,把对象作为中心点,以类和继承作为构造机制,从而更好的设计和构建相应的软件系统。

2.5 影响查询效率的因素

SQL server数据库系统在处理查询计划时,首先要系统对词法和语法进行检查,检查完之后将其递交给SQL server的查询优化器,优化器会对数据是否存在和有效进行索引,再进行扫描、检索和连接,这个计划的执行是在同一时间进行的,通过分析来对计划的执行进行评价,通过开销最小的计划来实现,然后预编译模块会对语句进行处理,最后生成了查询规划,查询规划会在恰当的时间提交给系统,系统会将执行结果反馈给客户。在SQL server数据库中影响查询效率的因素主要有五点:

第一,当没有索引或者索引无法使用的时候。因为索引能够绕开全表扫描,能够有效提高查询速度。第二,在进行查询工作的时候,缺少计算列的时候是无法进行优化查询的。第三,查询出来的数据量很大的时候也会影响查询效率。第四,返回了不必要的行和列。第五,如果查询的时候语句选择不合理,就无法进行优化。语句选择不合理的情况主要有查询条件中的操作不合适,多个选择条件进行查询时,条件的次序不是最优。

3 SQL server数据库的查询优化方法(The method

of SQL server database query optimization)

3.1 建立索引

并不是所有的数据库都有索引,因为很多数据库不需要使用索引,索引是否应该存在有一些争议,究其原因,主要是数据库系统当中添加索引之后,再对数据库进行查询的时候,就无法对数据库中的所有内容进行扫描和查询,只能在索引范围之内进行查询了。基于这样一种情况,从性能角度来说,目标表记录的总数是固定的,因此,只有当查询结果比较少的时候,索引才会有较高的查询效率,如果查询结果很多,那么索引会导致查询效率降低,这也是索引的存在有争议的原因。在实际情况中,数据库系统要根据应用目的和实际状况进行合理配置,那些记录数较多的数据库应该要建立索引,从而有效提高查询效率。

3.2 SQL 查询语句的优化策略

一个数据库系统的反应速度的快慢,最为直接的表现就是优化器的计算方法。另外,优化器的测量和查询表中的其他内容和服务存在关联。由此可见,让优化器选择恰当的索引和表达的连接手段是十分重要的。

3.3 避免全表扫描

一般情况下,数据库在进行查询或者select语句的处理过程中,会扫描全表,在执行的时候,如果出现数据更新和数据删除的情况也会扫描全表。如果添加索引的话,能够让数据访问的速度得到提升。而要建立科学合理的索引,那就必须要充分了解数据,然后在实践中不断进行优化。

3.4 合理使用索引

索引在数据库中占有重要的地位,其对查询速度的提高有着十分明显的效果[3]。但是创建和使用索引的时候,索引都必须跟系统的查询需求一致。

3.5 选择恰当的操作符,提高查询效率

应该要尽可能的少用(NOT)IN,而使用(NOT)EXISTS,此外,还要尽量避免使用OR运算符,>和<可以用>=和<=来代替,同时,对于诸如IS NULL和 IS NOT NULL等操作也要尽量避免,另外,还要注意LIKE操作符的正确使用。

3.6 避免使用SELECT进行查询

endprint

在使用SQL语句的时候,一定要特别注意书写细节,避免使用SELECT来进行查询,在进行筛选的时候,尽量避免使用表达式,而要用常量来代替,而且如果表中数据量很大的话,要特别注意WHERE子句中的筛选条件的顺序,因为这会直接影响查询效率。

3.7 SQL语句对索引的利用

在实际的应用中,聚集索引的效率要比非聚集索引要高,聚集索引能够将数据在物理顺序上进行排列,计算在其中存在一些重复值,但是仍然集中在一起,这就能够将查询范围锁定在一个较小范围之内,可以有效提高扫描速度。

3.8 合理使用临时表

针对那些数据量很大,但是数据变化不是很多的数据库表,可以将子集排序,同时创建临时表,这就有效防止了多重排序操作,提高了查询速度。

3.9 建立视图

建立视图可以帮助人们更方便的进行数据查询等操作,因为视图可以让人们重点关注他们想要了解和感兴趣的数据和信息。在建立视图的时候一定要控制视图的规模,如果视图的规模比基本表要小,那么,查询速度会大大提高。

4 SQL查询安全监控系统(The SQL query safety

monitoring system)

SQL数据库系统的安全性也是人们关注的焦点[4-6],如果发现用户进行非法操作,系统就会自行进行处理。在监控攻击行为的时候,系统会对非法用户发出警告,同时还会对相关信息进行记录,在必要的情况下,还可能会阻断网络。在SQL系统中,有信息获取、分析机和控制台三个子系统,这三个系统之间会存在交互工作。

4.1 主机来实现报警

开启探头之后,可以独立监控数据库,给予数据库中的相关信息,把信息根据一定的规则进行分析,通过分析,判断数据库是否存在安全隐患,并且确定是否需要发出危险警报。如果某台的计算机在进行非法操作的时候,系统会记录该计算机的IP地址,并且按照上述步骤进行操作,控制台一旦收到危险警报,就会根据指令来执行阻断指令。分析机把阻断指令传递给探头,探头会调用SQL server数据库系统中的API函数,从而对进行非法操作的计算机的操作行为进行拦截,保证数据库中的数据和信息不会被泄漏、丢失和破坏。

4.2 下发命令

当控制台发出指令之后,指令会传递给分析机和信息获取部分,最后会通过对模块的响应来实现指令的操作。

4.3 传送相关数据

探头、分析机和控制台三者之间的数据传递都是通过端口来进行的,要有效传送数据和信息,这些信息的格式是要统一的,如果不是统一的标准格式,信息无法传递和接收。

5 结论(Conclusion)

SQL server数据库系统是一个很庞大的系统,在应用过程中,数据库的运行速度和运行效率是十分重要的,有些数据库运行速度慢、运行效率低,严重影响了数据库的性能。因此,在设计和开发数据库的时候,一定要将数据库的运行速度和效率放到重要位置。要有效提高数据库的使用效率和查询效率,就必须对数据库进行全面的分析,了解数据库的缺陷,优化语句设计,从而发现语句查询优化的关键。进行数据库查询优化是一项复杂的工作,需要从整体的角度来综合处理,要从各个方面分析影响查询优化的因素,依据实际情况来优化SQL语句。科学合理的设计数据库是数据库运行良好的基础,在此基础上,对数据库进行优化能够提高查询效率,从而满足用户的需求。

参考文献(References)

[1] 刘芬.关于SQL数据库的性能优化问题的研究[J].软件,2012,33(6):139-141.

[2] 杨润秋,张庆敏,张恺翊.基于防火墙技术对网络安全防护的认识[J].计算机光盘软件与应用,2013(15):137;139.

[3] 李丽宏,赵娜.卡尔曼滤波在动态汽车衡称量中的应用[J].软件,2012,33(3):25-28.

[4] 李辉,王至邀.一种多条件分页查询优化方法的设计[J].计算机工程,2010(2):23-24.

[5] 王力,王成良.基于免疫遗传算法的关系型数据库查询优化技术[J].计算机系统应用,2008,18(1):72-75.

[6] 石剑平,蔡光程.SQL Server 2005查询优化技术的研究与实现[J].信息系统工程,2010,23(5):78-79.

作者简介:

薛 亚(1979-),女,硕士,讲师.研究领域:计算机软件及应用.

endprint