欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

查询优化的必要性(转)

程序员文章站 2024-03-01 09:37:10
...

 

      查询优化的最终目的是为了提高数据库系统的性能,但查询为什么在效率上会有差别呢?对于SQL查询,由于相同的表存在不同的存取方法;两个表的连接存在不同的连接方法;多个表的连接也存在不同的连接次序.因此,对于一个给定的查询通常会存在很多等价的执行计划,这些执行计划的输出结果相同,但是执行效率的差别往往很大。下面的例子可以说明不同执行计划在效率上的差别。

      假设在一个数据库中包括以下几种关系:

雇员信息:emp(name,age,Sal,dno)

部门信息:dept(dno,dname,rloor,budget,mgr,ano)

账目信息:aent(ano,type,balanee,bno)

银行信息:bank(bno,bname,address)

接下来考虑这样一个简单的SQL查询:

 

 

SELECT name,floor
FROM emp,dept
WHERE emp.dno=dept.dno AND sal>100K
 

 

 

相关的参数信息假设如下表2一1所示.

考虑下面三种不同的执行计划:

P1:通过B+树找出emp中所有满足工资大于IOOK的元组,然后用hash索引找出相应的dept中的元组;

 

P2:对于每个dept中的页,扫描整个emp关系。若emp中的元组满足工资条件大于100K,并且部门号与dept页中的元组相等,那么这两个元组形成的新的元组将作为查询结果中的元组;

 

P3:对于dopt的每个元组,扫描整个emp关系并存储所有的emp-dopt元组对。然后扫描这些元组对,检查每个元组的两个dno属性是否相等并且工资是否大于100K。

 

     计算以上三个计划的I/0代价,就可以看出其效率的不同。P1大约需要0.32秒,P2需要一个小时甚至更多,而P3需要超过一天的时间。由此可见,不同的执行计划之间的效率差异是很大的。如果没有查询优化技术的帮助,数据库的查询处理器很可能会生成最差的执行计划来执行,这必将大大的损害数据库系统的性能。而查询优化则可以列有可能的计划,并通过一定的方法选择出较好的、代价较小的计划来执行,从而提查询的效率。

 

     参数 参数值
关系emp的页数数                   20000
关系emp的元组个数数 100000
emp中满足sal>100K的元组个数 10
关系dept的页数 10
关系dept的元组数 100
关系emp中的索引 在emp.sal上有聚簇B+树索引(深度为3)
关系dept中的索引 在dept.dno上有聚簇散列索引(平均桶长为1.2个页面)
缓冲区页面数 3
访问一个磁盘页面的代价 20ms


相关标签: SQL