SQL Server查询优化探析

时间:2022-06-23 09:14:42

摘要:在分析传统sql server查询优化技术的基础上,面向对象方法分析了SQL语句中的查询语句SELECT语法结构,概括出基于表达式类等7个抽象类的面向对象模型。使得用户可以根据这个模型创建、删除、组合和拆分这些类所定义的对象,提高了SQL Server的查询效率。

关键词:面向对象;查询优化;SQL Server

中图分类号:TP 文献标识码:A文章编号:1672-3198(2011)05-0259-01

1 引言

在IT技术高速发展,互联网已渗透至千家万户的今天,数据库技术始终居于中心地位。任何一个投入运行的信息系统中,都会有一个数据库管理系统作为支撑。在所有数据库管理系统中,SQL Server 则由于出自Microsoft公司,与Windows操作系统的紧密集成,以及方便易用的图形界面,而处于极其重要的位置。SQL Server是一个数据库管理系统, 它采用了单进程、多线索技术,支持存储过程,采用基于成本的优化技术,在核心层实现数据完整性约束, 并具有很强的安全保密性。它的工作主要是负责高速计算, 数据管理, 安全性及事务管理。

优化对于改善SQL Server性能至关重要,可以通过降低网络流量、减少磁盘I/O和降低CPU时间,最大化所有用户的处理吞吐量,以提供每个查询可以接受的响应时间。在SQL Server性能的优化中,数据查询的优化是一个重要的优化方法。本文在分析传统数据库管理系统查询优化技术的基础上,提出了通过面向对象的方法来实现SQL Server的查询优化。

2 数据库的查询优化技术概述

对于每一个查询, Microsoft SQL Server数据库内核用优化器优化向SQL 提交的数据操作。这个优化过程首先进行查询分析,判断每一个子句能否被优化。对不能优化的子句采用全表扫描, 可优化的子句, 则由优化器执行索引选择。索引选择确定可用的索引,并估算每个子句的开销。下面简单叙述一下SQL Server的查询优化技术:

2.1 自动查询优化技术

SQL Server的自动查询优化技术是通过基于开销的查询优化器来实现的。当提交一条SQL语句时,该语句只是指出想要从数据库中得到什么结果,而不是怎样得到结果。SQL Server使用基于开销的优化器,以CPU 使用,磁盘I/O作为度量方式,优化器为每个可能的执行规划赋予一个开销值,然后优化器选择一个开销值最小的执行规划。查询优化所做的工作很复杂,要找出最优执行规划,优化器要考虑数以千计的因素。除了检查统计数据来决定以合适的方式使用索引外,优化器还必须考虑访问表的顺序、所采用的连接算法、合适的排序算法,以及许多其他细节方面的问题。当提交给查询处理器时,只要比较两个输入来产生一个输出时,就会用到连接操作。连接操作可以在表与表之间,索引和表间,以及索引和索引之间使用。SQL Server 查询处理器会使用三种类型的连接策略:嵌套循环连接、合并连接和哈希连接。优化器必须考虑每个算法以决定对于给定情况的最合适算法。

2.2 索引技术

索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。表的存储由两部分组成,一部分用来存放数据页面,另一部分存放索引页面。通常索引页面相对于数据页面来说小得多。数据检索花费的大部分开销是磁盘读写,没有索引就需要从磁盘上读表的每一个数据页,如果有索引,则只需查找索引页面就可以了。所以建立合理的索引,就能加速数据的检索过程。

SQL Server采用B-树结构的索引,根据索引的顺序与数据表的物理顺序是否相同可以分为:聚簇索引(clustered index)和非聚簇索引(nonclustered index)。

一般来说建立索引应注意以下几点:

(1)主键时常作为where子句的条件,应在表的主键列上建立簇索引,尤其当经常用它作为连接的时候;

(2)有大量重复值且经常有范围查询和排序、分组发生的列,或者非常频繁地被访问的列,可考虑建立簇索引;

(3)经常同时存取多列,且每列都含有重复值可考虑建立复合索引来覆盖一个或一组查询,并把查询引用最频繁的列作为前导列,如果可能尽量使关键查询形成覆盖查询;

(4)如果知道索引键的所有值都是唯一的,那么确保把索引定义成唯一索引;

(5)在一个经常做插入操作的表上建索引时,使用fillfactor(填充因子)来减少页分裂,同时提高并发度,降低死锁的发生。如果在只读表上建索引,则可以把fillfactor设为100;

(6)在选择索引键时,设法选择那些采用小数据类型的列作为键以使每个索引页能够容纳尽可能多的索引键和指针,通过这种方式,可使一个查询必须遍历的索引页面降到最小。此外,尽可能地使用整数为键值,因为它能够提供比任何数据类型都快的访问速度。

2.3 存储过程的使用

随着Client/Server的应用程序的广泛使用,如何充分利用网络资源、减少网络流量是提高应用查询性能的一个重要因素,而存储过程的使用则是减少网络流量,加快执行速度的必要环节。

存储过程是SQL Server服务器上一组预先定义并编译好的Transact-SQL语句,它可以接受参数、返回状态值和参数值,并且还可以嵌套调用。当一个存储过程被第一次运行时,SQL Server将该存储过程放入内存并完全编译(不必进行词法分析与规范化,因为在存储过程被创建时,这些工作就已经完成了),在该存储过程被再次调用时(无论是由同一用户还是不同用户调用),可以被马上处理,而没有任何额外开销。另外,存储过程是一种模式化的程序设计,在Client/Server的应用程序中,使用存储过程可以方便地进行程序设计,减少程序员的工作量。

3 使用面向对象的方法实现SQL Server的查询优化

面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。

而如何将面向对象的方法运用到SQL Server的查询中去,首先我们需要对SQL语句进行分析,用类来归纳和构建SQL语句。

3.1 SELECT语句的语法结构分析

整个SELECT语句可以表示成为7个类。

(1)表达式类(expression)。

(2)字段类(field)。

(3)数据类(data)。

(4)数据表类(table)。

(5)数据类型类(type)。

(6)SQL关键字类(SQLKEY)。

(7)运算符类(operator)。

3.2 SQL SERVER查询语句的面向对象模型

图1是使用以上7个类的面向对象模型。

从模型可以看出,本文构建的SQL语句面向对象的模型用户可以方便直观的创建、删除、合并、拆分各种类型的表达式,无需记忆程序内部处理字段、函数等SQL语法的具体形式。达到了提高SQL SERVER中查询语句的运行效率目的,提高了SQL Server的性能。

4 结语

随着Internet的日益普及, 基于SQL Server的应用程序, 其应用范围也越来越广。而数据库系统查询是数据库系统设计和实现中的一个重要步骤,也是基于SQL Server应用程序设计时的一个重要问题。本文在分析了传统SQL Server查询优化的基础上,提出了通过面向对象方法构建对象类来解析SQL查询语句,使得用户能够用户可以方便直观的创建SQL Server中的查询语句,而不用去关心内部的细节问题,使得整个数据查询可以高效,透明的进行。

参考文献

[1]龙守谌,叶乃文,邝劲筠.Microsoft SQL Server 6.5培训教程[M].北京:人民邮电出版社,1998.

[2]车争,夏巨谌,胡国安,张宜生.基于SQL Server的数据库与应用程序的优化[J].计算机辅助工程,NO.4 Dec,2002.

[3]胡江奕,任宏萍,毛法尧.基于SQL Server的应用程序的优化[J].计算机工程与应用,1998,(10).

[4]骆翔宇,成良玉.用面向对象方法设计并实现数据库的动态查询[J].计算机工程与应用,2003,(15).

上一篇:用友ERP-U8操作应用问题探讨 下一篇:大型电子汽车衡检定规程探析