關於oracle索引

2021-09-01 22:40:53 字數 1543 閱讀 7960

table access by index rowid 

index single value 

index range scan 

full_scan

fast_full_scan

skip_scan

index_join(bitmap conversation)

簡單的說索引分 單塊所掃和多塊索引掃。單塊和多塊的區別你應該知道。什麼時候用單塊,當oracle不知道下一步要怎麼做的時候就一定是單塊。既然不知道,用多塊有什麼意義? 如果知道下一步應該怎麼走,為什麼用單塊? 畢竟單塊效率低下。

index fast full scan,索引快速掃瞄。 獲取的資料不需要排序,既然不要排序,當然一掃而過,所以肯定是多塊獲取。所以index fast full scan效率肯定高於index table full scan

index table full scan,索引全掃瞄,索引全掃瞄一定是按照排序輸出,也就是資料已經排好序了。那麼這個是用單塊掃還是多塊掃? 我感覺是單塊+多塊。  如果全用單塊,oracle就太傻了。但是畢竟要按順序出資料,所以單塊是避免不了。這也是為什麼上面說效率會低於ffs。

index skip scan, index range scan 這些都屬於範圍掃瞄了。單塊。 oracle不可能一開始就查詢哪些block在乙個區段,然後還要查詢這些資料範圍是否在同乙個區段,所以oracle只能通過brance查詢指向leaf的指標,乙個乙個這麼找。 這也是為什麼當查詢資料太多時,使用索引效率其實不好,不如全表掃瞄,因為全掃是多塊。

有了概念再來看看你問的,table access by index rowid、index single value、index range scan

table access by index rowid   oracle通過index找到rowid,然後根據rowid去表查詢對應的資料。table access by index rowid一定是索引掃瞄後的動作,不可能以開始就table access by index rowid,否者rowid從何處得來?

index single value是通過唯一索引,或者主鍵獲取一條資料。這個沒什麼特殊啊,和index range scan一樣啊,只是拿的資料是唯一的。

full_scan

fast_full_scan  你仔細想想,能直接通過索引就獲取資料的說明什麼? 說明索引裡就包含了資料啊。索引是由字段資料+rowid實現的啊。

所以當你看到上面2個方式第一反應就是索引裡包含要獲取的字段。 那麼為什麼會有full_scan,如果你不僅包含字段,還要排序,那麼ffs肯定不行啊,full_scan就可以了啊。

skip_scan 假設有a,b 2個字段的索引,如果你只查詢b欄位,別的資料庫,可能沒有這種訪問機制,但是oracle提供了skip的方式,可以通過索引掃瞄b。但是畢竟不是以b欄位打頭,所以代價比較高。

index_join(bitmap conversation) 這個東西和最上面一樣,索引就能獲取資料,那當然可以做join了。

oracle的概念本沒那麼複雜,僅僅是按照常人的思考來實現的功能,你只要稍微想想,如果是你,你會怎麼來實現,那就一目了然了。

oracle關於索引

一.說說你對索引的認識 索引的結構 對dml影響 對查詢影響 為什麼提高查詢效能 索引有b tree bit cluster等型別。oracle使用了乙個複雜的自平衡b tree結構 通常來說,在表上建立恰當的索引,查詢時會改進查詢效能。但在進行插入 刪除 修改時,同時會進行索引的修改,在效能上有一...

關於ORACLE建立資料庫索引

由於公司電子商務 平台版本老化,且使用oracle資料庫,前期dba在設計資料庫建表結構時候存在一定的問題,對索引的使用不夠重視,大致資料的查詢比較慢 當然也有一些由於使用hibernate中不夠重視 color red oracle採用自下而上的順序解 析where子句,根據這個原理,表之間的連線...

Oracle索引 索引型別

oracle 提供了多種不同型別的索引以供使用。簡單地說,oracle 中包括如下索引 b 樹索引 這些是我所說的 傳統 索引。到目前為止,這是 oracle 和大多數其他資料庫中最常用的索引。b 樹的構造類似於二叉樹,能根據鍵提供一行或乙個行集的快速訪問,通常只需很少的讀操作就能找到正確的行。不過...