条件用到了c1、c2、c3
c3没有对应的索引列
所以这个查询执行完成至少要全表遍历一边
所以不会使用c1、c2的索引的
c3没有对应的索引列
所以这个查询执行完成至少要全表遍历一边
所以不会使用c1、c2的索引的
解决方案 »
- 这个SQl语句有点难写,不会写~~呵呵,选择问题
- 如何让select * from table where myname='myname'不区分大小写?
- 如何在使用sqlplus命令登录sys
- 查询的速度问题
- 如果现在oracle的安装目录和以前的安装目录不一样,在保留以前的oradata\目录的情况下,如何有效恢复所有数据???
- 请问在哪里能够找到oracle方面比较好的书啊!!!!万分感谢!!
- 高分求教,在线等.ora_12571:tns:包写入程序失败
- 请教insert...日期怎么插入
- 字段的动态执行
- 请教一个SQL 请大神们 指教
- QTP连接oracle出了点问题求帮忙看下
- 求助!!oracle 11.2.0.3 RAC 问题 node connectivity
cbo来根据统计信息采取最优的执行计划,在当前环境下,走索引可能会比不走索引的成本更高
这里主要是因为c1和c2的选择性不高
优化以前要先弄清楚,在这个查询中,c1,c2,c3哪个是主要的过滤条件,比例分别是多少
select count(*) from aa a;
select count(*) from aa a where a.c1='7' and a.c2 in ('1','2','3');
的结果贴出来看看.10g的话大概超过5%就不会走索引了,当然oracle也要考虑其它因素,集群因子,二元高度,直方图等.不过也有一种情况是因为统计信息不准确造成的.
你也可以试一下,
select /*+index(a 你的索引名)*/* from aa a where a.c1='7' and a.c2 in ('1','2','3') and a.c3='3'
看看会不会比不加hint要快.