Mysql學習之索引介紹及其原理

2021-08-07 09:56:00 字數 2316 閱讀 1352

1、索引的分類

(1)單值索引:即乙個索引只包含單個列,乙個表可以有多個單值索引。

(2)唯一索引:索引列的值必須唯一,但是允許有空值。

(3)復合索引:即乙個索引包含多個列。

2、語法

(1)建立

create [unique] index indexname on mytable(columnname(length));

或alter mytable add [unique] index [indexname] on (columnname(length));

(2)刪除

drop index [indexname] on mytable;
(3)檢視

show index from table_name\g;
3、4種新增資料庫索引的方式

(1)alter table tbl_name add primary key (column_list):新增乙個主鍵,這意味著索引值必須是唯一的,且不能為null;

(2)alter table tbl_name add unique index_name (column_list):建立索引的值必須是唯一的(除了null外,null可能會出現多次)

(3)alter table tbl_name add index index_name (column_list):新增普通索引,索引值可出現多次。

(4)alter table tbl_name add fulltext index_name (column_list):指定索引為fulltext,用於全文索引。

4、索引結構

(1)btree索引

(2)hash索引

(3)full-text全文索引

(4)r-tree索引

5、檢索原理(btree索引)

(1)初始化介紹

一顆b+樹,淺藍色的塊我們稱之為乙個磁碟塊,可以看到每個磁碟塊包含幾個資料項(深藍色所示)和指標(黃色所示),如磁碟塊1包含資料項17和35,包含指標p1、p2、p3。

p1表示小於17的磁碟塊,p2表示在17和35之間的磁碟塊,p3表示大於35的磁碟塊。

真實的資料存在於葉子節點,即3、5、9、10、13、15、28、29、36、60、75、79、90、99。非葉子節點不儲存真是資料,只儲存指引搜尋方向的資料項,如17、35並不是真實的存在於資料表中。

(2)查詢過程

如果要查詢資料項29,那麼首先會把磁碟塊1由磁碟載入到記憶體,此時發生一次io,在記憶體中用二分查詢確定29在17和35之間,鎖定磁碟塊1的p2指標,記憶體時間因為非常短(相比磁碟的io)可以忽略不計,通過磁碟塊1的p2指標的磁碟位址把磁碟塊3由磁碟載入到記憶體,發生第二次io,29在26和30之間,鎖定磁碟塊3的p2指標,通過指標載入磁碟塊8到記憶體,發生第三次io,同時記憶體中做二分查詢到29,結束查詢,總計三次io。

6、那些情況適合建立索引

(1)主鍵自動建立唯一索引;

(2)頻繁作為查詢條件的字段應該建立索引;

(3)查詢中與其他表關聯的字段,外來鍵關係建立索引;

(4)查詢中排序的字段;

(5)查詢中統計或者分組的字段;

7、哪些情況不適合建立索引

(1)表記錄太少的不要建立索引;

(2)經常增刪改的表不要建立索引;

(3)頻繁更新的字段不要建立索引;

(4)where條件用不到的字段不要建立索引;

(5)如果某個資料列包含許多重複的內容(資料重複且分布平均的表字段),為它建立索引就沒有太大的實際效果(如國籍、性別)。例:假如乙個表有10萬行記錄,有乙個欄位a只有t和f兩種值,且每個值的分布概率大約為50%,那麼對這種表a欄位建立索引一般不會提高資料庫的查詢速度。

8、索引的選擇性

索引的選擇性是指索引列中不同值的數目與表中記錄數的對比。如果乙個表中有2000條記錄,表索引列有1980個不同的值,那麼這個索引的選擇性就是1980/2000=0.99。

乙個索引的選擇性越接近於1,這個索引的效率就越高。

MySQL之索引介紹

在關聯式資料庫中,索引是一種單獨的 物理的對資料庫表中一列或多列的值進行排序的一種儲存結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。索引分類 從資料結構角度來分 btree 索引 has...

mysql的索引詳細介紹及其使用

首先介紹幾個關於mysql的基礎知識,後面介紹索引時會使用到的基礎知識 1.mysql的儲存引擎 分為兩種,innodb和myisam 區別 主要的區別是innodb適合頻繁寫資料庫操作,myisam適合讀取資料庫的情況多一點。在表的過程中出現了一點小插曲,出現了中文亂碼問題 解決方法就順便帶上了 ...

原 學習ORCALE索引

索引 索引是加快檢索表中資料的方式。對於包含大量資料的表來說,如果沒有索引,那個麼可能對錶中資料的檢索速度慢得難以忍受。邏輯 單列索引 索引關鍵字值包含一列的索引。復合索引 索引關鍵字包含了表中的多個列.列的數量最多是32個。惟一性索引 限制索引列不能出現重複值。非惟一性索引 不對索引列的重複值進行...