sql分页优化
索引优化
注意查询的数据占总数据达到一定量的时候可能导致索引失效。可以用limit或者指定列缩小数据区域可以解决。
以时间orderby排序的limit分页优化
前提用order by分页
limit分页在两三万左右时可以使用,超过十万条记录时要先查询出前n-1页的时间最大值max(date),以这个为开始时间。这里变动的参数只有下面的300000,这里为查询第30001页的数据。
300000为pagerow*(page-1)得来。
select * FROM tbl where sysDate >(select max(sysDate) from (select sysDate from tbl where sysDate>='2018-03-01 00:00:00' order by sysdate asc limit 0,300000) aa) AND sysDate <= '2019-08-27 23:59:59' order by sysDate limit 0,10
和用自增id每次用最大id作为参数查下10条原理一样。
测试结果
40w表 left join 40w表,在使用索引情况下,直接limit是15秒,使用查询前N-1页最大日期在limit是6秒。
获取分页总数
一般的分页列表会要求返回记录总条数,这时候不是获取列表数据,不必要关联所有的表。当count百万级的数据时一点关联表就会很慢。解决方法是根据参数动态left join表。
如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~