1. 程式人生 > >【轉載整理】 分頁

【轉載整理】 分頁

整理 alt www pre spa 翻頁 分頁查詢 限定 service

1 條件優化 加入限定(記錄之前頁信息)

https://zhuanlan.zhihu.com/p/26043916

LIMIT 語句
分頁查詢是最常用的場景之一,但也通常也是最容易出問題的地方。比如對於下面簡單的語句,一般DBA想到的辦法是在type, name, create_time字段上加組合索引。這樣條件排序都能有效的利用到索引,性能迅速提升。

SELECT * 
FROM   operation 
WHERE  type = SQLStats 
       AND name = SlowLog 
ORDER  BY create_time 
LIMIT  1000, 10; 
好吧,可能90
%以上的DBA解決該問題就到此為止。但當 LIMIT 子句變成 “LIMIT 1000000,10” 時,程序員仍然會抱怨:我只取10條記錄為什麽還是慢? 要知道數據庫也並不知道第1000000條記錄從什麽地方開始,即使有索引也需要從頭計算一次。出現這種性能問題,多數情形下是程序員偷懶了。在前端數據瀏覽翻頁,或者大數據分批導出等場景下,是可以將上一頁的最大值當成參數作為查詢條件的。SQL重新設計如下: SELECT * FROM operation WHERE type = SQLStats AND name = SlowLog AND create_time >
2017-03-16 14:00:00 ORDER BY create_time limit 10; 在新設計下查詢時間基本固定,不會隨著數據量的增長而發生變化。

2.語句優化

https://www.zhihu.com/question/48250165/answer/110243061

select * from driver_order_record where end_time >= 1459353600 and end_time <1459440000 limit 1000 offset 444700;

select * from driver_order_record as a join (select service_order_id from
driver_order_record where end_time >= 1459353600 and end_time <1459440000 limit 1000 offset 444700) as b on a.service_order_id=b.service_order_id;

技術分享圖片

技術分享圖片

B查詢中的子查詢,只返回了主鍵,結果集較小,再去用ID進行關聯效率還可以接受

【轉載整理】 分頁