基于SQLSERVER的数据库查询优化浅析.docx

基于SQLSERVER的数据库查询优化浅析.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

?

?

基于SQLSERVER的数据库查询优化浅析

?

?

论文导读:在数据库的众多应用实例中,相对于数据库的其他操作,查询操作所占的比重最大,根据ACM的统计资料,数据库管理系统80%以上的工作是用于数据的查询和检索。因此,查询速度的快慢直接影响到数据库系统的性能。为了优化数据库系统的性能,除了可以通过改进数据库使用的硬件条件、软件环境和规范化设计外,数据查询的优化,提高查询的响应时间对于改善SQLServer性能也至关重要。

关键词:SQLSERVER,数据库,查询,优化

?

1概述

在数据库的众多应用实例中,相对于数据库的其他操作,查询操作所占的比重最大,根据ACM的统计资料,数据库管理系统80%以上的工作是用于数据的查询和检索。因此,查询速度的快慢直接影响到数据库系统的性能。为了优化数据库系统的性能,除了可以通过改进数据库使用的硬件条件、软件环境和规范化设计外,数据查询的优化,提高查询的响应时间对于改善SQLServer性能也至关重要。

2逻辑结构设计

关系的规范化是一种根据关系的属性间函数相关性的规则把数据分布到多个表的技术。规范化程度较高,进行查询时就容易会产生占用较高系统资源和高I/O的代价,会降低系统响应时间。为了提高数据库的性能,可使用含有一定数据冗余的较低范式的关系,当然这种样做会使系统产生数据不一致性问题。因此在数据库的逻辑设计时,我们需要在数据冗余度和响应时间上进行权衡考虑,灵活的采用规范化和非规范化相结合的策略进行数据库设计。

2.1减少连接运算

连接运算是开销很大的操作,参与连接的关系越多、越大,开销也越大。必须进行连接时,一般要先使用选择、投影等操作把不需要的数据都去掉,以减少连接的负担。

我们数据库设计时,规范化设计一般是将非规范化的实体分割成较小的列和更多的表,从而减少数据的冗余,消除更新、删除异常。但关系划分的越细,我们在查询时就会涉及到多张表,要使用多的连接,从而就会大大降低查询的效率。所以我们数据库设计时,并非达到的范式越高越好,为了保证查询性能,有时不得不牺牲规范化的要求选择较低的范式。

2.2分割关系

关系的大小对查询的速度影响颇大,有时候我们会将一个很大的关系分割成几个小的关系来提高查询。

(1)从垂直方向分割关系。若把一个关系中常用的属性和很少使用的属性分成两个关系,则可提高常用查询的速度,要注意的是分割时,每个关系中都必须含有首要关键字。

(2)水平分割关系。例如关于学生的数据,可以把全校学生的数据放在一个关系中,也可按系建立学生关系。前者对全校范围的查询是方便的,后者可以显著提高一个系范围内的查询速度。如果一般的查询都由系里的人员进行,查询的是本系内的内容,则按系建立学生关系可以提高性能。如果数据库系统有多个磁盘驱动器,则可把水平分割的关系分布在不同的磁盘组上,可以并行访问,提高数据库的性能。

3物理结构设计

物理结构设计的目的是使数据库中数据以合理的存储结构和存储方法存储在物理设备上。

(1)当进行数据存储时把频繁被访问的数据或记录同较少被访问的数据或记录分开,分别放到高速和低速存储设备上。

(2)把text、image和大二进制类型字段列存放在一个单独的物理设备上可以提高访问的性能。

(3)选择合适的字段类型,特别是对于被索引的列更是如此。比如能使用tinyint类型就不要用bigint类型,这样的关系可以减少I/O操作。

4合理使用索引

当SQLServer需要定位某一行记录或某一范围的记录时,首先确定表中是否存在索引:如果不存在有效的索引,则对整个表进行逐行的扫描;如果存在索引,则使用索引对数据进行访问。索引的作用即相当于书的日录,通过索引可快速定位所需要查找的内容,避免全表搜索的发生。

但使用索引也存在如下的问题:一是索引需要占用额外的存储空间;二是在数据进行更新时,索引也要作出相应的更新,因此会增加许多额外的开销。因此,索引的使用要恰到好处。

可以考虑建立索引的列:

(1)主键

通常,检索、存取表是通过主键来进行的。因此,应该考虑在主键上建立索引。

(2)连接中频繁使用的列

用于连接的列若按顺序存放,系统可以很快地执行连接。如外键,除用于实现参照完整性外,还经常用于进行表的连接。

(3)在某一范围内频繁搜索的列和按排序顺序频繁检索的列。

不考虑创建索引的列:

(1)很少或从来不在查询中引用的列,因为系统很少或从来不根据这个列的值去查找数据行。

(2)只有两个或很少几个值的列(如性别,只有两个值“男”或“女”),以这样的列创建索引并不能得到建立索引的好处。

(3)以bit、text、image数据类型定义的列。

(4)数据行数很少的小表一般也没有必要创建索引。

表上的索引过多会影响更新、插入、删除的性能,因为所有的索引都须做相应的调整;另

文档评论(0)

186****3372 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档