覆盖索引
1. 问题
覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到。
判断下面的SQL哪些是覆盖索引,为什么?
select * from tb_user where id = 1
是,因为根据id查询的,id默认是主键索引,就是聚簇索引,聚簇索引中对应的是整行的记录
select id,name from tb_user where name = 'Arm'
是,因为通过name这个二级索引也可以找到id,是一次性可以查询出来id和name的
select id,name,gender from tb_user where name = 'Arm'
不是,需要通过回表查询才能获取到gender
2. 覆盖索引的概念
覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到。
3. mysql超大分页处理
在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低。
我们一起来看看执行limit分页查询耗时对比:
因为,当在进行分页查询时,如果执行limit 9000000,10,此时需要MySQL排序前9000010记录,仅仅返回9000000 - 9000010 的记录,其他记录丢弃,查询排序的代价非常大。
优化思路:
一般分页查询时,通过创建覆盖索引能够比较好地提高性能,可以通过覆盖索引加子查询形式进行优化
4. 问题总结
5. 问答