一. B+树索引 (适合高选择性字段,例如性别就是低选择性)
分为聚集索引和辅助索引。聚集索引是根据主键创建的一颗B+树,聚集索引的叶子节点存放了表中的所有记录。
辅助索引是根据索引键创建的一颗B+树,与聚集索引不同的是,其叶子节点存放索引键,以及索引键指向的主键。
注意细节: Cardinality查看索引是否是高选择性。可以通过show index from tableName来查看。表示索引中唯一只记录数量的
预估值。cardinality是一个预估值,应该尽可能接近1,如果非常小,那么就要考虑是否还有建立这个索引了。在访问高选择性属性的字段
并从表中取出很少一部分数据时,对这个字段添加B+索引是非常有必要的.
查看一个表中有几个索引 show index from tablename
查看你用sql时,使用了那些索引.
CREATE TABLE buy_log(
userid INT UNSIGNED NOT NULL,
title VARCHAR(20),
buy_date DATE
)ENGINE=InnoDB;
INSERT INTO buy_log VALUES (1,'zh', '2009-01-01');
INSERT INTO buy_log VALUES (2,'zh', '2009-01-01');
INSERT INTO buy_log VALUES (3,'zh', '2009-01-01');
INSERT INTO buy_log VALUES (1,'zh', '2009-02-01');
INSERT INTO buy_log VALUES (3,'zh', '2009-02-01');
INSERT INTO buy_log VALUES (1,'zh', '2009-03-01');
INSERT INTO buy_log VALUES (1,'zh', '2009-04-01');
/*添加索引*/
ALTER TABLE buy_log ADD KEY (userid);
ALTER TABLE buy_log ADD KEY (userid,buy_date); (联合索引)
ALTER TABLE buy_log ADD KEY (userid,title);
ALTER TABLE buy_log DELETE KEY (userid);
/*删除索引 删除联合索引要删除索引名(用show index可以查看)*/
drop index userid ON buy_log;
指定索引
/*USE INDEX(a) 告诉mysql优化器可以选择该索引,选不选还要看优化器自己判断*/
explain select * from t USE INDEX(a) where a=1 and b=2;
/*FORCE INDEX(a) 告诉mysql优化器必须选择使用该索引*/
explain select * from t FORCE INDEX(a) where a=1 and b=2;