Fork me on GitHub

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表。

 

posted @ 2019-08-27 18:20  秋夜雨巷  阅读(1512)  评论(0编辑  收藏  举报