MySQL索引

在本教學中,您將學習如何使用MySQL索引以及如何利用索引來加快數據檢索。我們將介紹一些常用和方便的語句,讓您可以有效地管理MySQL索引。

資料庫索引或索引,有助於加速從表中檢索數據。 當從表查詢數據時,首先MySQL會檢查索引是否存在,然後MySQL使用索引來選擇表的精確物理對應行,而不是掃描整個表。

資料庫索引類似於書的目錄。果果要查找某個主題,首先查找索引,然後打開具有該主題的頁面(頁碼),而不掃描整本書。

強烈建議您在經常查詢數據的表的列上創建索引。 請注意,所有主鍵列都是表的主索引。

索引有助於加快查詢數據,為什麼我們不使用所有列的索引? 如果為每列創建索引,MySQL必須構建和維護索引表。每當對表的行進行更改時,MySQL必須重建索引,這需要時間以及降低資料庫伺服器的性能。換句話說:使用索引可以加快查詢數據,但是減慢了修改數據的速度。

創建MySQL索引

創建表時經常創建索引。MySQL自動將聲明為PRIMARY KEYKEYUNIQUEINDEX的任何列添加到索引。 另外,您可以向已經有數據的表添加索引。

要創建索引,可以使用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存儲引擎支持,僅在數據類型為CHARVARCHARTEXT的列中接受。
  • SPATIAL索引支持空間列,可用於MyISAM存儲引擎。另外,列值不能為NULL

然後,在USING關鍵字之後命名索引及其類型。索引的名稱可以是BTREE HASHRTREE,但必須根據表的存儲引擎遵循允許的索引。

以下是具有相應允許的索引類型的表的存儲引擎:

存儲引擎 允許的索引類型
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索引,包括創建和刪除索引。


上一篇: MySQL重命名表 下一篇: MySQL數據類型