SELECT * FROM table1 LIMIT offset, rows
上述SQL语句的实现机制是:
- 从“table”表中读取offset+rows行记录
- 抛弃前面的offset行记录,返回后面的rows行记录作为最终结果。
这种实现机制存在一个弊端:虽然只需要返回rows行记录,但却必须先访问offset行不会用到的记录。对一张数据量很大的表进行查询时,offset值可能非常大,此时limit语句的效率就非常低了。
优化:
1、使用记录主键的方式进行优化
select * from user where id > 1000000 order by id limit 10;
2、使用子查询进行查询
select * from user where main_id >= (select main_id from user limit 1000000,1) limit 10;
3、使用子查询进行查询