select *
from fzdc.cwtz_gjh
where rq between to_date('20100301','yyyymmdd') and to_date('20100331','yyyymmdd')create index cwtz_gjh_rq on cwtz_gjh(rq)
analyze table cwtz_gjh compute statisticsSELECT STATEMENT, GOAL = CHOOSE Cost=2 Cardinality=603 Bytes=27135
TABLE ACCESS FULL Object owner=FZDC Object name=CWTZ_GJH Cost=2 Cardinality=603 Bytes=27135
我明明已经建了rq索引为什么还全表扫描呢?
解决方案 »
- PL/SQL Developer开发环境中查找刚创建函数的问题
- 求一个sql 拼接 + 急急急 + 高分 +
- ORA-01460: unimplemented or unreasonable conversion requested
- 如何让ORACLE触发器只对某一行有用
- 初学Oracle,请高手指教!
- 关于安装ORACLE 9I 的一个很困难的问题,急,感激!
- 两个表的结构相同,如何把一个表的数据都insert到另一个表的sql语句如何写?
- 关于字段转换的问题!!!!
- 急!!高手们快快进来阿!!!
- Oracle10+:关于定时给表做分析的设计(实际应用)【对原先的代码进行进一步修改】
- 获取ORACLE表的所有字段问题
- pl/sql的帮助文档
2, 表中的数据是从哪天开始的,如果总共只有2个月的数据,你使用一个between and的返回超过50%的结果肯定不会走索引(疑似超过5%oracle就拒绝使用索引了);
3,如果你非要走索引可以尝试加hint
select /*+index(a cwtz_gjh_rq)*/ *
from fzdc.cwtz_gjh a
where rq between to_date('20100301','yyyymmdd') and to_date('20100331','yyyymmdd')
加上根据索引查找到的ROWID读数据块的成本
大于
扫描数据表的成本,那么ORACLE可能决定不使用索引。你也可以试试基于规则的HINT(/*+rule*/)
比较一下