表里有索引,为什么还都是全表扫描?
2012-02-10 15:49
661 查看
http://www.itpub.net/thread-421134-1-1.html
这是有CBO根据执行计划的成本决定的
exec dbms_stats.gather_table_stats(ownname='test',tabname=>'dept',cascade=>true);
用/*+ index(table_name index_name) */的HINT来强制走索引。
如:select /*+ index(emp pk_emp) */ from emp where empno=7934;
前提是你要了解应用,知道哪些语句走索引比较高效,否则效果适得其反。
===========
http://space.itpub.net/519536/viewspace-612715
查看( 421 ) /
评论( 6 ) / 评分(
5 / 0 )
伟大的Oracle
SQL优化器可以判断出在某些情况下,使用全表扫描比使用索引扫描能更快的得到数据结果。
有没有想过,她是怎么做到的呢?
背后的原理是什么呢?
举一个非常好理解的场景(scenario:通过索引读取表中20%的数据)解释一下这个有趣的概念:
假设一张表含有10万行数据--------100000行
我们要读取其中20%(2万)行数据----20000行
表中每行数据大小80字节----------80bytes
数据库中的数据块大小8K----------8000bytes
所以有以下结果:
每个数据块包含100行数据---------100行
这张表一共有1000个数据块--------1000块
上面列出了一系列浅显易懂的数据,我们挖掘一下这些数据后面的故事:
通过索引读取20000行数据 = 约20000个table access by rowid = 需要处理20000个块来执行这个查询
但是,请大家注意:整个表只有1000个块!
所以:如果按照索引读取全部的数据的20%相当于将整张表平均读取了20次!!So,这种情况下直接读取整张表的效率会更高。很幸运,Oracle也是这么想的:)
-- The End --
这是有CBO根据执行计划的成本决定的
exec dbms_stats.gather_table_stats(ownname='test',tabname=>'dept',cascade=>true);
用/*+ index(table_name index_name) */的HINT来强制走索引。
如:select /*+ index(emp pk_emp) */ from emp where empno=7934;
前提是你要了解应用,知道哪些语句走索引比较高效,否则效果适得其反。
===========
http://space.itpub.net/519536/viewspace-612715
查看( 421 ) /
评论( 6 ) / 评分(
5 / 0 )
伟大的Oracle
SQL优化器可以判断出在某些情况下,使用全表扫描比使用索引扫描能更快的得到数据结果。
有没有想过,她是怎么做到的呢?
背后的原理是什么呢?
举一个非常好理解的场景(scenario:通过索引读取表中20%的数据)解释一下这个有趣的概念:
假设一张表含有10万行数据--------100000行
我们要读取其中20%(2万)行数据----20000行
表中每行数据大小80字节----------80bytes
数据库中的数据块大小8K----------8000bytes
所以有以下结果:
每个数据块包含100行数据---------100行
这张表一共有1000个数据块--------1000块
上面列出了一系列浅显易懂的数据,我们挖掘一下这些数据后面的故事:
通过索引读取20000行数据 = 约20000个table access by rowid = 需要处理20000个块来执行这个查询
但是,请大家注意:整个表只有1000个块!
所以:如果按照索引读取全部的数据的20%相当于将整张表平均读取了20次!!So,这种情况下直接读取整张表的效率会更高。很幸运,Oracle也是这么想的:)
-- The End --
相关文章推荐
- 不会使用索引,导致全表扫描情况
- 不会使用索引,导致全表扫描情况
- 什么情况导致全表扫描,而不是用索引
- 不会使用索引,导致全表扫描情况
- 查看全表扫描及全索引扫描的数量
- 什么情况导致全表扫描,而不是用索引
- 全表扫描和索引扫描的区别
- 为什么有时全表扫描比通过索引扫描效率更高 (转)
- 【概念】为什么有时全表扫描比通过索引扫描效率更高
- sql语句优化:尽量使用索引避免全表扫描
- MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析
- oracle 性能优化操作十八: 决定使用全表扫描还是使用索引
- 关于索引,我们可以多知道一些 -- 全表扫描和索引扫描
- 什么时候全表扫描比使用索引扫描能更快?
- 『管理调优』找出全表(索引)扫描SQL
- SQL SERVER中关于OR会导致索引扫描或全表扫描的浅析
- 处理一次物流系统mysql大并发全表扫描SQL增加索引的过程
- 全表扫描、索引扫描与物理读
- 写一条SQL,使它通过全表扫描方式的效率优于索引访问,分别给出各自的执行计划。
- 索引读和全表扫描