分页查询优化
测试表如下:
SELECT COUNT(*) FROM `g_beta_account_record`;
可以看到这张表有200多W条数据。
一般分页查询
一般分页查询都是使用limit
。
分别执行下面3条sql:
1、执行时间:0.008 sec
SELECT * FROM `g_beta_account_record` AS ar LIMIT 0, 100;
2、执行时间:0.501 sec
SELECT * FROM `g_beta_account_record` AS ar LIMIT 1000000, 100;
3、执行时间:1.003 sec
SELECT * FROM `g_beta_account_record` AS ar LIMIT 2000000, 100;
得出结论:
从查询时间来看,基本可以确定,在查询记录量低于100时,查询时间基本没有差距,随着查询记录量越来越大,所花费的时间也会越来越多。
这种分页查询方式会从数据库第一条记录开始扫描,所以越往后,查询速度越慢,而且查询的数据越多,也会拖慢总查询速度。
优化
这种方式先定位偏移位置的 id,然后往后查询。
执行时间:0.513 sec
SELECT
*
FROM
`g_beta_account_record` AS ar,
(SELECT
id
FROM
`g_beta_account_record`
LIMIT 2000000, 100) AS atable
WHERE ar.id = atable.id;
相比上面第3条SQL时间快了大约1倍。
更详细的优化: