一. 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;