索引的优化

发现一个SQL执行很慢,如下:

select *
  
from rmes.r_wip_tracking_t wt, cmes.c_material_t m
 
where m.material_type = 1
   
and (m.material_spec like 'L%' or m.material_spec like 'C%')
   
and wt.model_id = m.material_id      
   
AND WT.sn >= '1073H2H72270002'
   
and WT.sn <= '1073H2H72270002'

计划分析后,发现是都有走索引。
统计两个表如下:

1.R_WIP_TRACKING_T: 总共有3580030记录,其中用SN有索引,并且SN在表中唯一
2.c_material_t 总共有512条数据,material_type是外键有NORMAL索引,material_spec无索引
有一点发现,如果去掉material_type=1的SQL会变很快,说明是material_type的问题
在512记录中发现

MATERIAL_TYPE COUNT
0 196
1 276
2 8
3 10
4 8
5 13
7 1
说明MATERIAL_TYPE索引类型错了,需要改成BITMAP型
执行:
drop index FK_TYPE;
create bitmap index FK_TYPE on C_MATERIAL_T (MATERIAL_TYPE) tablespace CMES;
就把SQL的运行时间从89秒降低到了0.15秒

原文地址:https://www.cnblogs.com/enli/p/692806.html