当前位置: 代码迷 >> Oracle技术 >> 关于oralce一条查询语句的优化有关问题
  详细解决方案

关于oralce一条查询语句的优化有关问题

热度:312   发布时间:2016-04-24 08:05:48.0
关于oralce一条查询语句的优化问题
我这儿有一个关于优化的问题:
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万的数据,只看一个字段是重复的说明不了什么。
建议改成分区表

------解决思路----------------------
引用:
这700万的数据,表的大小是八百多兆,建立分区表的话肯定不能按时间去分区,因为里面有重复值,按时间的话,有可能一个值会在两个分区,这个表会一直增长,按照这个字段下面的值去分区应该可以吧,或者是先建个函数索引去看看?

你们说的重复值是根据一个字段重复就能判定了??
一般都拿行重复来说的
------解决思路----------------------
不错,这个字段选择性很高,普通索引即可。问题出在字段是字符型,但是传值却用了数值型。解决方法:稍微改下写法,例如pro_inst_id='30283'
即,sql条件里,在这个地方,值的两边加上引号,变成字符串
或者,将这个字段类型改成数字
  相关解决方案