怎么建立索引,索引的原理,非聚集和聚集索引.explain

1-Mysql的存储引擎

怎么建立索引,索引的原理,非聚集和聚集索引.explain
剧烈
怎么建立索引,索引的原理,非聚集和聚集索引.explain

2-索引特点,存储引擎特点及选择

怎么建立索引,索引的原理,非聚集和聚集索引.explain

3-Btree:Mylsam表存储引擎的(非聚集索引)

怎么建立索引,索引的原理,非聚集和聚集索引.explain
Btree(blance tree)原理
怎么建立索引,索引的原理,非聚集和聚集索引.explain
所以可见 Btree 能存的数据很大,哪怕是21亿的数据,我们有索引是需要查找32次,而不是21亿次的全盘扫描.这就是为什么索引快的原因.

3-Btree:InnodDB表存储引擎的(聚集索引)

怎么建立索引,索引的原理,非聚集和聚集索引.explain

4-聚集索引和非聚集索引

4.1 聚集索引(InnodDB)

  • 页码下面的数字

怎么建立索引,索引的原理,非聚集和聚集索引.explain

所以在建立了id为聚集索引后,又建了name为索引,执行 select id,name,age from 表名 where name=a
检索过程是:先从name索引,获取了name的值,但是因为已经有了id为聚集索引,所有name的索引上并没有其他字段的值,会跳到id的这个聚集索引上获取其他的值

4.2 非聚集索引(Mylsam)

  • 字典最前面几页的索引,或者书的目录

5-索引的优缺点及原则

5.1 优点:


提高检索速度,降低磁盘的IO

5.2 缺点

索引需要存储,也就需要空间,索引实际上就是一张表,子弹更新(insert,delete,update)会有性能损耗

5.3 原则

适合做索引的字段:

  • 频繁作为where条件的字段
  • 关联字段可以建索引,例如外键…
  • order by col group by col

不适合做索引的:

  • where条件中用不到的字段
  • 频繁更新的字段
  • 数据值发布比较均匀的不适合建索引,例如男女字段,真假值
  • 表的数据可以确定行数的,而且数据量很少

6-索引失效

  - 什么情况下索引失效
  建立单个索引时,
  index(name)

建立复合索引情况1时
index(name.age)

select * from user order by age --索引失效,因为name为第一个索引,相当于一楼,age为第二索引,相当于二楼,不能直接到二楼,
select *  from user where age=18 and name='张三' --索引失效,也是一样的问题,先到二楼,在到一楼不成立

建立复合索引情况2时
index(name.age)
select * from user where age>18 and name='张三' --部分失效(走age索引了,但name失效)

上一篇:MySql(六):Explain详解


下一篇:SQL优化