SQL优化
1,翻页优化
简介:在日常查询中翻页必不可少同样也就离不开limit,offset的使用,其简单使用就不做介绍了,主要介绍上千万数据如何优化,用单表5000w的数据量进行测试,请看下方sql以及注释
需求:获取从1000w开始的50条数据
# 方案 1:
select * from table limit 10000000,50
exec time (30 min 4.20 sec)
# 方案 2
select * from table as a
inner join
(select id from table limit 10000000,50) as b
on a.id = b.id
exec time (6 min 53.76 sec)
结论:
从执行时间上看相差很大,分析原因:
方案1之所以允许时间长有几个原因,
,mysql查询时,经过多次io操作,查找出 offset + limit 的数据总和,然后在返回50条,
,做了回表操作,因b+tree的非叶子节点只存放聚簇索引,辅助索引,需要进行回表操作获取具体数据
方案2,之所以快有以下几个原因
,先查出id,该查询用了覆盖索引,查询效率会很快
,因id是主键也就是聚簇索引,在获取具体field时避免了回表操作(二次查询)