關於資料庫的索引

2022-09-07 17:12:14 字數 1349 閱讀 7059

1 什麼是索引

索引是原始表之外額外的一種資料結構。最簡單的理解,比如使用二分查詢來對單列索引,那麼這樣的索引就是對該列進行排序,排序好之後,每個結點有乙個該列所對應的行的行號。這樣在對該列進行查詢的時候,先進行二分查詢,即lg複雜度,就找到了該列的結點,進而找到該列對應的行號,然後就從表中獲取到了該行了。

二分查詢存在不平衡的問題,另外因為索引也要訪問外存,對io次數也有要求,因此索引一般使用b+樹,因為b+樹的資料是放在葉子結點的,不需要將索引檔案全部讀入記憶體中,可以節省記憶體占用。

也不一定就索引和原始表分開,innodb的話,就是一體的,原始表的資料直接儲存在葉子結點,myisam是分開的。

2 索引加快查詢速度的原理

二分查詢將線性查詢複雜度變成了lg複雜度。

3 索引的缺點

索引需要額外的磁碟空間,但是索引所佔的磁碟空間比原始表要小得多,因為位址一般是4個位元組的,而原始表中的一行資料一般都是很大的。

更新表,也要更新索引檔案本身,這樣更新操作需要更多的時間。

4 資料庫領域裡面的各種常見的索引

b+ tree,hash等,這個地方還需要進一步研究。

5 b+樹索引

這裡先考慮單列索引,對需要建立索引的列,建立一棵b+樹。這樣查詢的時候,時間複雜度就是lg了。

b+樹索引本質上是索引列的排序,因此也比較適合於範圍查詢。

多列索引也是一顆b+樹。

6 hash索引

hash索引本質上就是使用乙個hash函式將需要建立索引的列雜湊到不同的桶中,如果有衝突在桶中再進行第二次查詢即可。 

hash索引不適合於範圍查詢。

7 多列索引的原理

多列索引是一種字首索引,也就是說,查詢的時候,只要查詢條件是多列索引的字首,那麼該索引就是起作用的。

比如索引(a, b, c), 

where a=3 and b=45 and c=5 .... 這種三個索引順序使用中間沒有斷點,全部發揮作用;

where a=3 and c=5... 這種情況下b就是斷點,a發揮了效果,c沒有效果

where b=3 and c=4... 這種情況下a就是斷點,在a後面的索引都沒有發揮作用,這種寫法聯合索引沒有發揮任何效果;

where b=45 and a=3 and c=5 .... 這個跟第乙個一樣,全部發揮作用,abc只要用上了就行,跟寫的順序無關

多列索引也是一棵b+樹?如何實現的?

是的,多列索引也是一棵b+樹。 

多列索引的實現?

8 b+樹和紅黑樹的區別

紅黑樹是一種記憶體資料結構,b+樹是一種更適合磁碟的資料結構,b+樹的資料都放在葉子結點。

無論是b+樹還是紅黑樹都是相對於乙個key而言的,即相對於某一列而言的。

關於資料庫索引

i mysql資料庫索引型別 1 唯一索引 不允許表中任意兩行具有相同值的索引。2 非唯一索引 允許其中任何兩行具有相同索引值的索引。3 主鍵索引 資料庫表中有一列或列組合,其值唯一標識表中的每一行。4 聚集索引 表中記錄的物理順序與索引的順序一致。一張表只能有乙個聚集索引。5 非聚集索引 表中記錄...

資料庫 關於索引

什麼是索引 索引就像是書的目錄,是與表或檢視關聯的磁碟上結構,可以加快從表或檢視中檢索行的速度。索引中包含由表或檢視中的一列或多列生成的鍵。這些鍵儲存在乙個結構 btree 中,使sql可以快速有效地查詢與鍵值關聯的行。2.為什麼要建立索引,即索引的優點 建立索引的列可以保證行的唯一性,生成唯一的r...

關於資料庫的索引

經常需要進行更新操作的屬性 1 表的主鍵 外來鍵必須有索引 2 資料量超過300的表應該有索引 3 經常與其他表進行連線的表,在連線欄位上應該建立索引 4 經常出現在where子句中的字段,特別是大表的字段,應該建立索引 5 索引應該建在選擇性高的字段上 6 索引應該建在小字段上,對於大的文字字段甚...