分頁查詢優化
測試表如下:
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倍。
更詳細的優化: