Information Management Department
TCL Multimedia Technology Holdings LTD.China Business Center.
No.2,No.19 Zone,Zhongkai Road.Huizhou Guangdong 516006,P.R.China
TCL 电器销售有限公司 信息管理部 Page 1(4) 10/12/2010
一,概述
下面描述的一条执行结果不足 60 条的 sql 执行时间长达 6 秒,需要进行优化处理。
我们从估计的执行计划可以看到,该 sql 最为耗时的操作是对 inventory_item 的全表扫
描,估计的当前代价为 8317。
实际上,sql 的查询条件中有一个对该表过滤的条件 where ii.party_id = ‘&party_id’。并
且表上存在前导列为 party_id 的索引。
这里 oracle 选择使用 table access full 代替索引执行的可能性有两个。第一个可能是统计
信息较为陈旧;第二个可能是存在直方图,影响了 oracle 对选择因子的判断。
可行的解决方式有两个:
A,如果该查询条件比较固定(固定地选择 party_id),可以使用在 sql 中增加 hints 的方
式解决;
B,如果该查询条件不固定,需要 oracle 自行判断,可以尝试更新统计信息或者删除
party_id 列上的直方图,使用平均数作为选择因子。
二,脚本执行现状
表 1 sql 语句
select p.product_name,
pg.grade_name,
pc.color_name,
ii.quantity_on_hand,
ii.product_id,
ii.inventory_item_id
from inventory_item ii,
product p,
product_family_detail pfd,
product_color pc,
product_grade pg
where ii.product_id = p.product_id
and p.brand_id = pfd.brand_id
and p.category_id = pfd.category_id
and pfd.product_family_id = '01'
and pg.grade_id = ii.product_grade_id
and ii.party_id = 'JNJTV.GMDQ'
and p.color_id = pc.color_id
and ii.quantity_on_hand <> 0;
表 2 优化前执行计划
SELECT STATEMENT, GOAL = CHOOSE IO 耗费=8435 耗费=8435 基数=13032 字节=3570768
HASH JOIN IO 耗费=8435 耗费=8435 基数=13032 字节=3570768
TABLE ACCESS FULL 对象名称=PRODUCT_COLOR IO 耗费=2 耗费=2 基数=423 字节=10575
评论2