oracle数据库的emp表,用户为scott:
表中大约有1,000,000条数据库。
我执行查询:select ename from emp where deptno=10;查询时间为21.22秒然后我在dept列上增加索引idx1:同样执行select ename from emp where deptno=10;查询时间为21.18秒为使用快速全局扫描:我删掉上面建立的索引idx1,然后建立一个联合索引(在select列和where列上都建立索引,只会访问索引,而不去扫面表):create index idx2 on emp (deptno,ename);为保证查询时使用idx2索引,我加了个提示,事实上emp上就一个主键的索引
然后执行查询:select /*index_ffs(emp inx2)*/ename from emp where deptno=10;查询时间为21.09秒天哪,查询时间几乎一样,我建立的索引为什么没有用呢?????????
谁能帮我分析一下?我看的oradle性能与优化上做的实验显示,利用idx2做查询的速度最起码得快10倍!
表中大约有1,000,000条数据库。
我执行查询:select ename from emp where deptno=10;查询时间为21.22秒然后我在dept列上增加索引idx1:同样执行select ename from emp where deptno=10;查询时间为21.18秒为使用快速全局扫描:我删掉上面建立的索引idx1,然后建立一个联合索引(在select列和where列上都建立索引,只会访问索引,而不去扫面表):create index idx2 on emp (deptno,ename);为保证查询时使用idx2索引,我加了个提示,事实上emp上就一个主键的索引
然后执行查询:select /*index_ffs(emp inx2)*/ename from emp where deptno=10;查询时间为21.09秒天哪,查询时间几乎一样,我建立的索引为什么没有用呢?????????
谁能帮我分析一下?我看的oradle性能与优化上做的实验显示,利用idx2做查询的速度最起码得快10倍!
楼主可以用Explain plan 分析下语句,看看执行计划里面到底走没走索引。 建了索引不一定就走, Oracle 优化器会根据STATISTIC的信息来决定用CBO还是RBO. 先把表分析下:
analyze table tablename compute statistics for all indexes;
看看走没走索引..SQL语句的执行计划走不走索引除了与Statistic有关系,还有pfile的一个参数有关:optimizer_index_cost_adj. 该参数影响优化器选择索引还是全表扫描的倾向,建议将其设为40. Oracle 10g Statistic数据统计
http://blog.csdn.net/tianlesoftware/archive/2009/10/14/4668723.aspx楼主还可以试试这个强制索引:
select /*+ index(emp inx2) */ ename from emp where deptno=10;当返回的数据集超过了整个记录的20%时,此时的建议是不要走索引,楼主这肯定没这回事了,顺便提下..
set autotrace on explain