以千万级别的数据表为例
首先我们直接查询:
select * from article limit 9999999,10;
明显看到,用了 19.145 秒的时间。
解决方法
一、可以通过子查询的方式:
select * from article where id >= (select id from article limit 9999999,1) limit 10;
用子查询的方法,少用了 6.5 秒左右。
二、先查询ID,再查询数据:
select id from article limit 9999999,10;
查询的时间用了 2.898 秒,得到ID为:
10090907,10090912,10090924,10090996,10091131,10091158,10091206,10091268,10091289,10091721
select * from article where id in (10090907,10090912,10090924,10090996,10091131,10091158,10091206,10091268,10091289,10091721);
通过ID查询,只用了0.028 秒的时间,总时间用了 2.926 秒,比第一次查询快了 16.219 秒。
三、先加索引再查询
alter table article add index idx_title_url_author(title,url,author);
select title,url,author from article where id >= (select id from article limit 9999999,1) limit 10;
通过加索引查询,比第一次快了 7.7 秒左右。
以上测试是innodb储存引擎的,速度也和服务器或本机的性能相关。