利用优化概要文件进行 SQL 调优
2010-08-13 00:00:00 来源:WEB开发网 闂傚倷绶氬ḿ褍螞閹绢喖绠柨鐕傛嫹

清单 12 清除缓存中的优化概要文件
FLUSH OPTIMIZATION PROFILE CACHE XQPENG.HSJOIN
FLUSH OPTIMIZATION PROFILE CACHE ALL
应用优化概要文件
对于清单 13 中的查询语句,基于统计信息的估算,优化器得出表 t2 中的符合条件的数据行数多于表 t1 中的符合条件的数据行数,故会将 t2 表作为 Hash Join 中的小表来首先生成 Hash 值列表,然后在遍历 t1 表进行匹配。然而根据用户的实际经验,这是一个错误的估计,因此我们通过一个特定的优化概要文件,来指示让优化器生成我们希望的访问计划,即由 t1 作为 Hash Join 中的小表来生成 Hash 值列表。清单 14 和 15 给出了优化器在给定优化概要文件之前和之后所生成的访问计划。
清单 13. SQL 查询语句
select t1.c3,t2.c3 from t2 ,t1 where t1.c1=t2.c1
and t1.c1<100 and t2.c2 >60
清单 14. 没有指定优化概要文件时的访问计划
Access Plan:
-----------
Total Cost: 804.126
Query Degree: 1
Rows
RETURN
( 1)
Cost
I/O
|
154.429
HSJOIN
( 2)
804.126
52
/-----+------\
200.185 77.2143
TBSCAN TBSCAN
( 3) ( 4)
385.013 416.576
26 26
| |
2000 2000
TABLE: XQPENG TABLE: XQPENG
T2 T1
Q2 Q1
清单 15. 指定优化概要文件后的访问计划
Access Plan:
-----------
Total Cost: 804.126
Query Degree: 1
Rows
RETURN
( 1)
Cost
I/O
|
154.429
HSJOIN
( 2)
804.126
52
/-----+------\
200.185 77.2143
TBSCAN TBSCAN
( 3) ( 4)
385.013 416.576
26 26
| |
2000 2000
TABLE: XQPENG TABLE: XQPENG
T1 T2
Q1 Q2
结束语
如果在应用了所有的常用调优技术之后,例如建索引,收集统计信息等,SQL 优化器给出的执行计划仍然具有明显的缺陷,这时用户就可以考虑采用优化概要文件的方式,来指示优化器生成指定的执行计划。但是建议用户在使用这个特性时要谨慎,对于优化概要文件,优化器需要额外的查询匹配开销,此外,优化概要文件里的特定内容也可能会随着时间和数据库状态的变化而改变。所以,需要定期地检查它们的实现,以便从它们的使用中获取最大限度的收益。
更多精彩
赞助商链接