在本教學中,您將學習如何使用MySQL索引以及如何利用索引來加快數據檢索。我們將介紹一些常用和方便的語句,讓您可以有效地管理MySQL索引。
資料庫索引或索引,有助於加速從表中檢索數據。 當從表查詢數據時,首先MySQL會檢查索引是否存在,然後MySQL使用索引來選擇表的精確物理對應行,而不是掃描整個表。
資料庫索引類似於書的目錄。果果要查找某個主題,首先查找索引,然後打開具有該主題的頁面(頁碼),而不掃描整本書。
強烈建議您在經常查詢數據的表的列上創建索引。 請注意,所有主鍵列都是表的主索引。
索引有助於加快查詢數據,為什麼我們不使用所有列的索引? 如果為每列創建索引,MySQL必須構建和維護索引表。每當對表的行進行更改時,MySQL必須重建索引,這需要時間以及降低資料庫伺服器的性能。換句話說:使用索引可以加快查詢數據,但是減慢了修改數據的速度。
創建MySQL索引
創建表時經常創建索引。MySQL自動將聲明為PRIMARY KEY,KEY,UNIQUE或INDEX的任何列添加到索引。 另外,您可以向已經有數據的表添加索引。
要創建索引,可以使用CREATE INDEX語句。 下麵說明了CREATE INDEX語句的語法:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
USING [BTREE | HASH | RTREE]
ON table_name (column_name [(length)] [ASC | DESC],...)
首先,根據表類型或存儲引擎指定索引:
- 對於
UNIQUE索引,MySQL創建一個約束,索引中的所有值都必須是唯一的。除了BDB之外,所有存儲引擎都允許重複的NULL值。 FULLTEXT索引僅由MyISAM存儲引擎支持,僅在數據類型為CHAR,VARCHAR或TEXT的列中接受。SPATIAL索引支持空間列,可用於MyISAM存儲引擎。另外,列值不能為NULL。
然後,在USING關鍵字之後命名索引及其類型。索引的名稱可以是BTREE HASH或RTREE,但必須根據表的存儲引擎遵循允許的索引。
以下是具有相應允許的索引類型的表的存儲引擎:
| 存儲引擎 | 允許的索引類型 |
|---|---|
MyISAM |
BTREE, RTREE |
InnoDB |
BTREE |
MEMORY/HEAP |
HASH, BTREE |
NDB |
HASH |
第三,聲明要添加到索引的表名稱和列表列。
在MySQL中創建索引的示例
在示例資料庫(zaixiandb)中,可以使用CREATE INDEX語句將employees表的officeCode列添加索引,如下所示:
CREATE INDEX index_officeCode ON employees(officeCode)
刪除索引
除了創建索引之外,還可以使用DROP INDEX語句來刪除索引。 有趣的是,DROP INDEX語句也映射到ALTER TABLE語句。 以下是刪除索引的語法:
DROP INDEX index_name ON table_name
例如,如果要刪除employees表的索引index_officeCode,可以執行以下查詢:
DROP INDEX index_officeCode ON employees
在本教學中,您已經瞭解了索引以及如何管理MySQL索引,包括創建和刪除索引。
