一般分页查询
一般的分页查询通过limit
子句来实现,语法如下
1 | SELECT * FROM table LIMIT [offset, ] rows |
随着查询记录数量rows
的增多,查询速度会越来越慢,但是它带来的影响没有查询偏移量offset
导致的变慢来得剧烈。
因为这种分页查询会从第一条记录开始扫描(没有用到索引),所以偏移量越大,速度越慢。
子查询优化
如果含有递增id的话,可以通过先定位分页id的偏移,然后往后查询。
1 | select * from orders_history where type=8 limit 100000,1; |
id限定优化
如果id是 【连续递增】的话,可以直接使用id来确定范围。
1 | select * from orders_history where type=2 |
或者
1 | select * from orders_history where id >= 1000001 limit 100; |
用其他表中确定的id号来索引查找效率也不低。
1 | select * from orders_history where id in |
它的原理就是先通过查找具有索引的id,然后通过索引定位数据。(select id,再select *)。
上面做法要求id是连续自增的,但是数据很有可能会出现缺失,这时可用临时表记录分页的id信息,进行in查询,可极大提高速度。