索引簡(jiǎn)述
1.mysql所有的列都可以被索引毒坛,每種引擎對(duì)每個(gè)表至少支持16個(gè)索引磺樱,總索引長(zhǎng)度至少為256字節(jié)砰蠢。
2.MyISAM和InnoDB默認(rèn)都是BTREE索引辨泳,支持前綴索引(對(duì)索引字段前N個(gè)字符創(chuàng)建索引)虱岂。MEMORY存儲(chǔ)引擎使用HASH索引,也支持BTREE
3.創(chuàng)建索引的語(yǔ)法:
? ? CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] on table_name(index_col_name)
4.刪除索引
????DROP INDEX index_name ON tbl_name
索引設(shè)計(jì)原則
1.最適合索引的列是出現(xiàn)在where子句中的列菠红,或連接字句中指定的列第岖,
2.使用唯一索引∈运荩考慮某列中值的分布蔑滓。索引的列的基數(shù)越大,索引效果越好遇绞。eg:性別 男女 屬于基數(shù)小烫饼,不合適
3.使用短索引,對(duì)長(zhǎng)字符串试读,可指定一個(gè)前綴長(zhǎng)度杠纵。例如char(100),可以指定前10個(gè)或20個(gè)字符作為索引钩骇”仍澹可以節(jié)省索引空間,磁盤(pán)IO較少倘屹,更快银亲,索引高速緩存中的塊能容納更多的鍵值。
4.利用最左前綴
5.不要過(guò)度索引纽匙。索引不是越多越好务蝠,越多維護(hù)成本高。
BTREE索引和HASH索引
1.HASH索引一些特征需注意
1.1 只用于使用=或<=>操作符的等式比較
1.2 優(yōu)化器不能對(duì)HASH索引來(lái)加速orderby操作
1.3只能使用整個(gè)關(guān)鍵字來(lái)搜索一行
2.BTREE索引烛缔,使用>,<,>=,<=,BETWEEN,!=或者<>,或者LIKE 'pattern'(不能以通配符開(kāi)頭)操作符時(shí)馏段,都可以使用相關(guān)列上的索引。