當前位置:
首頁 >
表里有索引,为什么还都是全表扫描?
發(fā)布時間:2024/4/17
47
豆豆
生活随笔
收集整理的這篇文章主要介紹了
表里有索引,为什么还都是全表扫描?
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?http://www.itpub.net/thread-421134-1-1.html
這是有CBO根據(jù)執(zhí)行計劃的成本決定的
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優(yōu)化器可以判斷出在某些情況下,使用全表掃描比使用索引掃描能更快的得到數(shù)據(jù)結(jié)果。有沒有想過,她是怎么做到的呢?
背后的原理是什么呢?
舉一個非常好理解的場景(scenario:通過索引讀取表中20%的數(shù)據(jù))解釋一下這個有趣的概念:
假設一張表含有10萬行數(shù)據(jù)--------100000行
我們要讀取其中20%(2萬)行數(shù)據(jù)----20000行
表中每行數(shù)據(jù)大小80字節(jié)----------80bytes
數(shù)據(jù)庫中的數(shù)據(jù)塊大小8K----------8000bytes
所以有以下結(jié)果:
每個數(shù)據(jù)塊包含100行數(shù)據(jù)---------100行
這張表一共有1000個數(shù)據(jù)塊--------1000塊
上面列出了一系列淺顯易懂的數(shù)據(jù),我們挖掘一下這些數(shù)據(jù)后面的故事:
通過索引讀取20000行數(shù)據(jù) = 約20000個table access by rowid = 需要處理20000個塊來執(zhí)行這個查詢
但是,請大家注意:整個表只有1000個塊!
所以:如果按照索引讀取全部的數(shù)據(jù)的20%相當于將整張表平均讀取了20次!!So,這種情況下直接讀取整張表的效率會更高。很幸運,Oracle也是這么想的:)
-- The End --
?
總結(jié)
以上是生活随笔為你收集整理的表里有索引,为什么还都是全表扫描?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ftp连接 java.net.Conne
- 下一篇: oracle Hint 使用