數據庫索引個人筆記

索引

Mysql的索引比如一本書的目錄,它能讓你更快找到你想要的內容。索引並不是越多越好,建立索引需要耗費磁盤空間,同時在對索引的維護上會消耗數據庫的性能,對於查找頻率高並且數據庫數據量大的數據建立索引能夠提高查找的性能。
索引的結構
索引主要有兩種結構,分別是B+TREE索引HASH索引

B+TREE

B+TREE是MySql使用最多的一種索引結構。
InnodbMyisam存儲引擎模式的索引類型。
由於所有索引數據都存儲在葉子結點上,並且增加了順序訪問指針,每個葉子結點都有指向相鄰兄弟(葉子)節點的指針,又因爲葉子上的數據是順序存儲的,因此在區間查詢上有更高的效率。比如查找18~49的數據,只需找到19,然後順着結點和指針順序遍歷可以訪問到所有需要的數據的葉子結點。
並且B+樹本身就是爲了減少磁盤的I/O讀取而在二叉查找樹上的基礎上改進的一種樹,可以大大減少磁盤I/O的讀取次數
B+樹

HASH

Memory表的默認索引類型,Mysql中只有Memory存儲引擎(Memory表只存儲於內存中,斷電會消失,用於臨時表)支持hash索引。
對於查詢單條記錄的場景,hash索引比B+RREE索引且有更高的效率。
hash

B+TREE和HASH索引結構的對比

對於查詢單條記錄,HASH索引具有更高的性能。
對於需要區間查詢以及數據排序的場景下,B+TREE更能滿足要求。

索引類型

1、 普通索引 INDEX
2、 唯一索引 UNIQUE INDEX
3、 主鍵索引 PRIMARY KEY
4、 組合索引 INDEX(column1,column2,…)
5、 全文索引 FULLTEXT

普通索引

最普通的索引,沒有任何限制。

唯一索引

索引值必須唯一,但允許空值。

主鍵索引

一種特殊的索引,一個表只能有一個主鍵,索引值唯一,不允許有空值。

組合索引

指多個字段上創建的索引,列個組合必須唯一,使用組合索引時遵循最左前綴集合,只在查詢條件中使用了創建索引時的第一個字段(也有人叫它做引導列,比有(col1,col2,col3,…),其中col1就是引導列)時,索引纔會被引用。
舉個例子:create index index_name on table_name(col1,col2,col3,…)
下面的查詢語句會使用索引:
1. where col1=
2. where col1 = ? And col2 = ?
3. where col2 = ? and col1 = ?
下面查詢語句不會使用索引:
1. where col2 = ?
2. where col3 = ?
3. where col2 =? And col3 =?

全文索引

只能用在Innodb和Myisam的存儲引擎上。在Innodb只能用在char/varchar/text的字段上。
這個內容有點大,單獨開一篇來寫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章