日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

表里有索引,为什么还都是全表扫描?

發(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。