大表分页查询优化

分页查询, 查询条件走索引字段

SELECT * FROM table_name t WHERE t.`cretime` < '2018-02-02'  LIMIT 1000, 10;

上面这个SQL其实查询了1000+10条数据,然后丢弃前面的1000条,这样性能。
如下的优化能够对查询进行优化,原因使用覆盖索引查出id,目的是减少了回表次数。

SELECT * FROM table_name  t
WHERE t.id IN (SELECT x.id FROM 
(
 SELECT o.id FROM table_name o WHERE o.`cretime` < '2018-02-02'  LIMIT 1000, 10 ) AS X
 )

如下的查询语句,但是可能会出现错误,取决于你的mysql版本:

SELECT * FROM table_name  t
WHERE t.id IN (
 SELECT o.id FROM table_name  o WHERE o.`cretime` < '2018-02-02'  LIMIT 1000, 10 );

错误如下:

错误代码: 1235
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

你可能感兴趣的:(大表分页查询优化)