mysql 索引

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

  

原文地址:https://www.cnblogs.com/shaoshao/p/4478430.html