在本教學中,您將學習如何使用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索引,包括創建和刪除索引。