MySQL索引

2019-10-16 22:58:23

在本教學中,您將學習如何使用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中建立索引的範例

範例資料庫(yiibaidb)中,可以使用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索引,包括建立和刪除索引。