mysql索引总结

来源:互联网 发布:linux怎么创建用户密码 编辑:程序博客网 时间:2024/05/22 16:52

索引包括 

   普通索引

   唯一索引(无重复值)

   主键索引  特殊的索引,一个表只能有一个主键索引。其作用与唯一索引一样。

   组合索引  超过1个列组合成的索引


一、.适合用索引的表


   经常查询的列,包括用索引的操作符号:<,<=,>=,>,=,between,in,以及like 右 %匹配。


二、不适宜用索引的情况

  

   由于索引表需要一定的空间存储,对表进行增删改的时候会对索引表同步更新。所以经常更新的列不适合建索引。另外一种情况是列数据重复数据太多,返回结果超过30%相同值的情况下会忽略索引。


三、组合索引

1.假设设置两个列为组合唯一索引,如果其中其中一个列重复值太多将使索引失效。

2.组合索引根据 最左前缀,相当于由设置索引列左边开始组合。例如 组合索引 a,b,c 列。条件满足 查询列存在 a或a,b及a,b,c列按顺序查询才会生效。 而 b,c、c,b 则不会使用上索引。

3.分别建索引 a,b,c    与建 组合索引 a,b,c 的区别在于  分别建索会比组合索引需要更多的空间。还有是第二点用不上索引的情况。


四、分析索引适用情况

用explain + 查询的sql 

返回的列包括:


id :自增编号 如果有多个表联合查询将返回多行


select_type : 

1.SIMPLE    简单的查询 不包括join union 等

2.PRIMARY 最外层的查询  

3.DEPENDENT SUBQUERY  子查询的第一个select

例:

EXPLAIN SELECT * 
FROM `yisi_city` 
WHERE id
IN (


SELECT id
FROM yisi_admin_member
WHERE `id` =1


 

4.DERIVED  查询的子集合 

例如:

EXPLAIN SELECT * 
FROM (


SELECT * 
FROM `yisi_city` 
WHERE 1

) AS a 

table :查询的表 

type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的。 

possible_keys:可能用上的索引

key:实际用上的索引

key_len:使用索引的长度。在建立索引列时可定义列的长度,其意义在于减少索引空间及当查询值超过某个长度值才使用索引。
ref:显示使用哪个列或常数与key一起从表中选择行

rows:查询扫描的行数 

extra:mysql 给出使用索引优化的建议