一、背景
直接從數據庫查詢所有數據,耗時、耗內存,改為分頁查詢部分數據
二、常規分頁查詢
1. mysql: limit 從第m條數據開始,查詢n條數據
select * from table limit m,n
2. sql server: top+子查詢
3. 原理:從數據庫的第一條記錄開始掃描
a. 越往后,即m越大,查詢越慢
b. 查詢的數據越多,即n越大,查詢越慢
三、優化方式
1. 使用子查詢進行優化,先查出一個id,再根據id進行limit,查出數據
2. 根據id做限定進行優化,把id作為where的條件
3. 使用臨時表進行優化,先查出所有id,再試用in查出數據
select * from table where id in (select id from table limit m,n)
四、優化原理
1. select * from table limit m,n 的查詢過程
a. 查詢到索引葉子節點數據
b. 根據葉子節點上的主鍵值,去聚集索引,查詢需要的全部字段值

2. 優化后

參考:
https://mp.weixin.qq.com/s/CmlfkRki0lCiDEIsz5pDpg
