在某个表中建了个索引,但explain plan中显是用的是全表扫描,哪个高手可以回答?SQL如下:
select * from "commission_trans"
where "ymonth" = '200905'SELECT STATEMENT, GOAL = CHOOSE 10115 690698 SELECT STATEMENT 10115 40751182
TABLE ACCESS FULL UXPOS commission_trans 10115 690698 TABLE ACCESS 1 40751182注:ymonth是有建索引的,而输出结果记录数只占全表的2%左右。
select * from "commission_trans"
where "ymonth" = '200905'SELECT STATEMENT, GOAL = CHOOSE 10115 690698 SELECT STATEMENT 10115 40751182
TABLE ACCESS FULL UXPOS commission_trans 10115 690698 TABLE ACCESS 1 40751182注:ymonth是有建索引的,而输出结果记录数只占全表的2%左右。
解决方案 »
- 关于用户对表的操作权限的问题
- oracle 求助
- 急!oracle中xmltable()函数的应用问题
- 分析内存,CPU给ORACLE数据库服务器?
- 如何判断一个directory是否存在
- 寻找sqlserver存储过程转为 oracle存储过程的工具
- !!!!关于SqlServer移植到Oracle语法问题
- 请教!!如何下载oracle 10G!!?
- 我是oracle初学者,请问大家学习有什末步骤吗?
- java插入数据到oracle,有源码, 两个字段设为varchar2(4000),但是修改的时候两个数据只能插入不到400就报错
- 如何写如下sql语句
- 挂板与oracle 的语句问题 请进!!
你在Instance级别所用的是all_rows的方式
你的表的统计信息(最可能的原因)
你的表很小,Oracle的优化器认为不值得走索引。
解决方法
可以修改init.ora中的OPTIMIZER_MODE这个参数,把它改为Rule或Choose,重起数据库。也可以使用Hint.补充:不走索引的原因,甚至加上 /*+index(table_name index_name)*/还不走索引,那可能是因为你要走索引的这列是nullable,虽然这列没有空值。
alter session set optimizer_mode=choose;也执行过,一样的。
nullable=Y 就会导致不走索引吗?没听说过,如果是真的话,我其它的表也有这样的索引,也可以走啊,我想不会是这个原因吧?
1,你的sql如此精炼,能不能把你的后面的条件写成绑定变量的形式,这样的话也可以提高一些效率!2,看来要从数据库底层来考虑下你的sql执行的效率了。有没有可能是索引失效了,重建索引试试看。
什么叫使用hint?请指教,谢谢!
请问什么是绑定变量形式?
我指的是如果你的数据库很少执行analyze的话.