`
hz_chenwenbiao
  • 浏览: 994761 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

查询优化的必要性(转)

SQL 
阅读更多

 

      查询优化的最终目的是为了提高数据库系统的性能,但查询为什么在效率上会有差别呢?对于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


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics