軟件測試 | MySQL索引概述
所有 MySQL 列類型都可以被索引,對相關(guān)列使用索引是提高 SELECT 操作性能的最佳途徑。根據(jù)存儲引擎可以定義每個表的最大索引數(shù)和最大索引長度,每種存儲引擎(如 MyISAM、InnoDB、BDB、MEMORY 等)對每個表至少支持 16 個索引,總索引長度至少為 256 字節(jié)。大多數(shù)存儲引擎有更高的限制。
MyISAM 和 InnoDB 存儲引擎的表默認創(chuàng)建的都是 BTREE 索引。MySQL 目前還不支持函數(shù)索引,但是支持前綴索引,即對索引字段的前 N 個字符創(chuàng)建索引。前綴索引的長度跟存儲引擎相關(guān),對于 MyISAM 存儲引擎的表,索引的前綴長度可以達到 1000 字節(jié)長,而對于InnoDB 存儲引擎的表,索引的前綴長度最長是 767 字節(jié)。請注意前綴的限制應(yīng)以字節(jié)為單位進行測量,而 CREATE TABLE 語句中的前綴長度解釋為字符數(shù)。在為使用多字節(jié)字符集的列指定前綴長度時一定要加以考慮。
MySQL 中還支持全文本(FULLTEXT)索引,該索引可以用于全文搜索。但是當前最新版 本中(5.0)只有 MyISAM 存儲引擎支持 FULLTEXT 索引,并且只限于 CHAR、VARCHAR 和 TEXT列。索引總是對整個列進行的,不支持局部(前綴)索引。
也可以為空間列類型創(chuàng)建索引,但是只有 MyISAM 存儲引擎支持空間類型索引,且索引的字段必須是非空的。
默認情況下,MEMORY 存儲引擎使用 HASH 索引,但也支持 BTREE 索引。
索引在創(chuàng)建表的時候可以同時創(chuàng)建,也可以隨時增加新的索引。創(chuàng)建新索引的語法為:
也可以使用 ALTER TABLE 的語法來增加索引,語法可 CREATE INDEX 類似,可以查詢幫助
獲得詳細的語法,這里不再復(fù)述。
例如,要為 city 表創(chuàng)建了 10 個字節(jié)的前綴索引,語法是:
如果以 city 為條件進行查詢,可以發(fā)現(xiàn)索引 cityname 被使用:
索引的刪除語法為:
例如,想要刪除 city 表上的索引 cityname,可以操作如下: