oracle訪問資料的訪問方法 :
1)全表掃瞄(full table scans, fts)
2)通過rowid的表訪問(table access by rowid或rowid lookup)
3)索引掃瞄(index scan或index lookup)有4種型別的索引掃瞄:
(1) 索引唯一掃瞄(index unique scan)
(2) 索引範圍掃瞄(index range scan)
在非唯一索引上都使用索引範圍掃瞄。使用index rang scan的3種情況:
(a) 在唯一索引列上使用了range操作符(> < <> >= <= between)
(實際測試只有用"="的時候才是用的index range scan,其他的走的是全表掃瞄)
(b) 在組合索引上,只使用部分列進行查詢,導致查詢出多行
(c)對非唯一索引列上進行的任何查詢。
注:如果條件只能夠使用 yyy like '%***%'這種用法,則是全表掃瞄,哪怕yyy是乙個索引。
(3) 索引全掃瞄(index full scan)
(4) 索引快速掃瞄(index fast full scan)
1.全表掃瞄(table access full)的情況:
a.where條件中如果有like,那麼無論like後的字段是否加了索引或者是否有unique約束,都會有是全表掃瞄。這種情況消耗的io比較高,一般都好幾千以上。
b.沒有where條件,這種情況肯定是全表查詢。
2.通過rowid的表訪問(table access by rowid)
首先需要理解下索引。因為通過所以索引查詢的時候,實際上是先通過查詢索引對應的rowid,然後再通過rowid來查詢具體的行。
由此查詢時如果走索引的實際上全都會走 table access by rowid;
3.索引掃瞄
a.索引唯一掃瞄(index unique scan)
查詢條件中 如xx=1234, 如果xx是主鍵或者唯一性約束所在列,則走index unique scan
b.索引範圍掃瞄(index range scan)
Hive On Spark執行計畫總結
1 hive on spark explain statement 在hive中,命令explain可以用來檢視查詢的執行計畫。對於hive on spark,這個命令本身不會改變,還會表現的和以前一樣。它仍然會顯示依賴語法樹和每個stage階段的執行計畫。然後,如果hive.execution.e...
執行計畫小總結
工作中偶爾會遇到效能不好的複雜sql語句,在定位不了問題的情況下就需要執行計畫出馬了。執行計畫顧名思義,就是oracle內部執行sql語句的詳細計畫步驟。當然,其他資料庫比如mysql sqlsever等也有這個概念。本文以我常用的oracle為例。如可檢視執行計畫?其實有很多種方法。最簡單的,用i...
執行計畫小總結
工作中偶爾會遇到效能不好的複雜sql語句,在定位不了問題的情況下就需要執行計畫出馬了。執行計畫顧名思義,就是oracle內部執行sql語句的詳細計畫步驟。當然,其他資料庫比如mysql sqlsever等也有這個概念。本文以我常用的oracle為例。如可檢視執行計畫?其實有很多種方法。最簡單的,用i...