本篇文章,我們將從索引基礎開始,介紹什麼是索引以及索引的幾種型別,然後學習如何建立索引以及索引設計的基本原則。
本篇文章中用於測試索引建立的user表的結構如下:
什麼是索引
索引(在 MySQL 中也叫“鍵key”)是儲存引擎快速找到記錄的一種資料結構
——《高效能MySQL》
我們需要知道索引其實是一種資料結構,其功能是幫助我們快速匹配查詢到需要的資料行,是資料庫效能優化最常用的工具之一。其作用相當於超市裡的導購員、書本里的目錄。
索引型別
可以使用SHOW INDEX FROM table_name;
檢視索引詳情
主鍵索引 PRIMARY KEY
它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時建立主鍵索引。
注意:一個表只能有一個主鍵
唯一索引 UNIQUE
唯一索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。
可以通過
ALTER TABLE table_name ADD UNIQUE (column);
建立唯一索引可以通過
ALTER TABLE table_name ADD UNIQUE (column1,column2);
建立唯一組合索引普通索引 INDEX
最基本的索引,它沒有任何限制。
可以通過
ALTER TABLE table_name ADD INDEX index_name (column);
建立普通索引組合索引 INDEX
組合索引,即一個索引包含多個列。多用於避免回表查詢。
可以通過
ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);
建立組合索引全文索引 FULLTEXT
全文索引(也稱全文檢索)是目前搜尋引擎使用的一種關鍵技術。
可以通過
ALTER TABLE table_name ADD FULLTEXT (column);
建立全文索引
索引一經建立不能修改,如果要修改索引,只能刪除重建。可以使用DROP INDEX index_name ON table_name;
刪除索引。
索引設計的原則
適合索引的列是出現在where子句中的列,或者連線子句中指定的列
基數較小的類,索引效果較差,沒有必要在此列建立索引
使用短索引,如果對長字串列進行索引,應該指定一個字首長度,這樣能夠節省大量索引空間
不要過度索引。索引需要額外的磁碟空間,並降低寫操作的效能。在修改表內容的時候,索引會進行更新甚至重構,索引列越多,這個時間就會越長。所以只保持需要的索引有利於查詢即可。
參考
- 《深入淺出MySQL》
-----END-----
喜歡本文的朋友們,歡迎掃一掃下圖關注公眾號擼碼那些事,收看更多精彩內容