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