在本教學中,您將學習如何使用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 |
第三,宣告要新增到索引的表名稱和列表列。
在範例資料庫(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索引,包括建立和刪除索引。