我这儿有一个关于优化的问题:
sys_wf_history 流程历史表 数据量是6945696 将近700万
pro_inst_id是它的一个字段,别人要求我在这个字段上面建立一个索引
select * from sys_wf_history where PRO_INST_ID = 383004;
这样的查询语句需要2.2秒左右,但是他们想控制在毫秒级,该如何优化呢
之后我查询到pro_inst_id 重复数据高达500万,我就把之前那个索引删掉,在这列建了一个压缩索引,这个索引建完之后,速度也没明显提高,只是快了0.1秒左右,现在让我把这个表弄成分区表,问题大致就是这样,这表有必要弄成分区表吗,能做到查询控制在毫秒级别吗
------解决思路----------------------
没必要,和分区没关系
重复数据高达500万,这个。。。没什么价值
如果表更新得比较频繁,普通索引就好了,不要压缩
count(distinct pro_inst_id)是多少?
另外,给个执行计划
------解决思路----------------------
建一个bitmap索引
------解决思路----------------------
1,看执行计划发现这里发生了转换TO_NUMBER("PRO_INST_ID"),所以需要建立函数索引
2,700万的数据,只看一个字段是重复的说明不了什么。
建议改成分区表
------解决思路----------------------
你们说的重复值是根据一个字段重复就能判定了??
一般都拿行重复来说的
------解决思路----------------------
不错,这个字段选择性很高,普通索引即可。问题出在字段是字符型,但是传值却用了数值型。解决方法:稍微改下写法,例如pro_inst_id='30283'
即,sql条件里,在这个地方,值的两边加上引号,变成字符串
或者,将这个字段类型改成数字