聚簇索引(InnoDB)
数据和索引存储在一起。只要找到了索引就找到了数据文件
会将磁盘数据按照一列或者多列的值进行排序,通常是按照主键内一列的值进行排序
一张表中只存在一个聚簇索引,也称为主键索引
非聚簇索引(MyLsam)
数据和索引分开存储
非聚簇索引查询数据的过程:
1)先查到聚簇索引的key
2)用这个key去查询真正的数据(回表)
非聚簇索引需要查询两次
查询得时候使用聚簇索引能提高查询效率,尽量避免走非聚簇索引回表的耗时操作
联合索引
最左匹配原则
例如:设置一个字段的三个关键字ABC为联合索引,那么当查询条件出现了BC但没有出现A时,无法使用联合索引的方式进行查询
索引的优缺点与应用场景:
优点:
1)加快数据的查询速度
缺点:
1)索引占用磁盘空间,除了数据表之外,每一个索引还要占用一定的物理空间
2)创建和维护索引要耗费时间
适合创建索引:
1.数据量大时
2.主键自动建立唯一索引
3.查询中排序的字段
4.多表关联查询
5.统计或分组字段
不适合创建索引:
1.表记录太少(索引有开销)
2.频繁更新
3.查询字段使用频率不高
order by
1)order by 进行排序是将where 条件查询之后的数据进行排序
2)符合最佳左前缀法则
3)它不会再排序,是因为通过索引查询出来的数据本来就是根据索引的最佳左前缀法则排好序序的
4)order by、group by属于非聚簇索引
order by和where同时出现时,order by的排序功能失效。
只有同时出现时,才会利用该字段的索引而避免排序
数据库的处理顺序:
1)根据where条件得到数据
2)执行order by时,先查看第一步的执行任务,看order by的字段是否在执行任务时利用了索引
如果是,则利用索引顺序而直接取得已经排好序的数据;如果不是,则进行排序操作
必须用非聚簇索引怎么加快效率?
非聚集索引所占空间的大小往往远小于聚集索引或堆表所占用的空间大小