1 在检查BI库的时候发现ODS_M_in表有一个很奇怪的索引,在ID,status,BILLTYPE上组合了一个索引。
2 模仿生产环境,看看这个索引范围扫描的cost有多少。发现和全表扫也没什么区别
3 仔细检查,status,和billtype这两列其实可选择性很小,且属于静态列,有插入和选择,但是update操作很少,适合位图索引。
4 操作过程。
—- 查看ID列是否可以作为主键。答案是肯定的
select count(id) from ODS.ODS_M_IN
3837571
select count(distinct id ) from ODS.ODS_M_IN
3837571
—-删除原来的无效索引。
drop index ODS.IDX_ODS_M_IN_1
—- 添加主键。
alter table ODS.ODS_M_IN add constraint pk_id primary key(id )
创建位图索引。
create bitmap index inx_ODS_M_IN_sta_bt on ODS.ODS_M_IN(status,billtype)
5 看看优化之后的sql cost是多少。如下图所示,可以看到提升了很多。下降到113
6 最后在需要添加索引的表上,添加索引。
create index INX_BPL_STAT_DOC on ODS.ODS_B_PLAN (DOCNO,status,isactive)
create bitmap index INX_DW_AP_AS_APOUTTYEP on EDW.DW_AP_AS(APOUTTYEP)
create bitmap index inx_ODS_M_OUT_sta_bt on ODS.ODS_M_OUT(status,billtype)
—- end—-