首页 > 范文大全 > 正文

SQL Server数据库的查询优化策略研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇SQL Server数据库的查询优化策略研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:查询优化是数据库的一项重要的性能,查询优化即是提高sql的执行效率,从而提高数据库性能。该文以SQL server为例,从减少计算量和内存使用量的角度,提出了一些新的查询优化方案,有效提高数据库查询效率。

关键词:SQL Server;查询优化;范式;SQL

中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)29-7085-03

Research of Query Optimization Based on SQL Server

WEI Yin-zhen1, CHEN Zhen-bing2

(1.The College of Post and Telecommunication of WIT, Wuhan 430064, China; 2.Zhejiang Supcon Information Technology Co.Ltd, Hangzhou 310004, China)

Abstract: As one of the most important performances of data base, query optimization aims to improve the efficiency of SQL, thus to promote data base performance. Taking SQL Server as an example, this paper puts forward some new query optimization schemes from the standpoint of reducing calculation amount and memory usage to effectively improve the database query optimization efficiency.

Key words: SQL Server; Query optimization; Normal form; SQL

查询优化在关系数据库系统中有着非常重要的地位。关系数据库系统和非过程化的SQL语句能够取得巨大的成功,关键是得益于查询化技术的发展。优化对关系系统来说既是挑战又是机遇。所谓挑战是指关系系统为了达到用户可接受的性能必须进行查询优化。关系数据库优化的总目标是:选择有效的策略,求得给定关系表达式的值。

1 引例

有员工数据表employee,和部门信息表department,现求销售部员工的姓名,用SQL语言表达为:

SELECT employee.e_name

FROM employee,department

WHERE employee.d_id= department. d_id and department.d_name='销售部'

系统可以用多种等价的关系代数表达式来完成这一查询:

Q1=∏e_name(δemployee.e_id=department.d_idΛd_name='销售部' '(employee ?荥?茳department)) (1)

Q2=∏e_name(Σo='2'(employee?荥?茳department)(2)

Q1=∏e_nam((employee?荥?茳 δ department. d_id='销售部') (3)

对于表达式1,首先要作连接运算。设一个内存块(存放连接运算的中间结果)能装10个employee元组或100个department元组,在内存中存放5块employee元组和1块department元组,则读取总快数为:

其中读employee表100块。读department表20遍,每遍100块。若每秒读写20块,则总计要花105s。

连接后的元组数为103×104 s设每块能装10个元组,则写出这些块要用106/20=5×104s。

然后作连接操作。假定内存处理时间忽略,这一步中间文件花费的时间需5×104 s。满足条件的元组假设仅50个,均可存放在内存。最后投影操作。

因此,表达式1执行查询的总时间≈105+2×5×104≈105s。这里所有的内存处理时间俊忽略不计。

对于表达式2,为了执行自然连接,读取employee和department表的策略不变,总的读取块数仍为2100块,花费时间为105s.dan自然连接的结果比表达式1情况大大减少,为104个。因此,写出这些元组的时间为104,仅为表达式1的千分之一。读取中间文件块,执行运算时间为50s。投影时间忽略。表达式2执行总时间≈105+50+50≈205s。

对于表达式3,先对department表作选择运算,只需读一遍department表,存取100块耗时为5s,因为满足条件的元组金50个,不必使用中间文件。读employee表,把读入的元组和内存中的department元组作连接。也只需读一遍employee表共100块耗时5s。最后作投影时间忽略。表达式3的执行时间≈5+5≈10s。假如department表按连接字段有索引,总的存取时间将进一步减少到数秒。

上述例子充分说明了查询优化的必要性。本文将从内存优化,数据库设计方案、SQL语句书写等方面展开讨论。

2SQL Server内存优化方法

内存是影响Microsoft SQL Server系统性能的一个重要因素,SQL Server数据库安装时将为具有32MB物理内存的机器缺省配置16MB可用内存,16MB物理内存的机器缺省配置4MB可用内存。应在Microsoft SQL Server数据库安装后进行内存选项(Memory)设置,最大配置值为2GB。为了确定SQL Server系统最适宜的内存需求,可以从总的物理内存中减去Windows NT4.0需要的内存以及其它一些内存需求后综合确定,理想的情况是给SQL Server分配尽可能多的内存,而不产生页面调度。

SQL server默认是无限制占用内存的,SQL Server 根据服务器的活动来增大或收缩缓冲区高速缓存,以使可用物理内存保持在 4 MB 到 10 MB 之间。如果仅仅是自己的机子上开发用,不是服务器的话,不可以让SQL无限制的占用内存的手动设置 SQL Server 内存选项有两种主要方法: 第一种方法,将 min server memory 和 max server memory 设置为同一值。此值与达到该值后分配给 SQL Server 缓冲池的固定内存量相对应。 第二种方法,将 min server memory 和 max server memory 设置成一个内存范围。这种方法在系统或数据库管理员希望配置 SQL Server 实例,同时又要考虑在同一台计算机上运行的其他应用程序的内存需求时很有用。

min server memory 保证了 SQL Server 实例的缓冲池可用的最小内存量。SQL Server 不会在启动时立即分配 min server memory 指定的内存量。不过,除非降低 min server memory 的值,否则当内存使用量由于客户端负荷而达到该值后,SQL Server 不能从已分配的缓冲池中释放内存。