Mysql千萬級數據快速分頁查詢方案
@(數據庫)[mysql]
[toc]
實際應用場景說明
服務器配置
: 阿里云 2核4G mysql服務器
生產場景
: 將mysql數據庫中的文章數據進行批量化處理更新
問題詳情
: 當分頁數過大時查詢速度很慢,且主鍵不是自增主鍵锈麸,不能用id來過濾
解決方法
: 使用了between and 的方式來加快了查詢速度
1.limit方法的局限性
select * from articles limit 100,500
> 查詢0.06秒
-
limit是最常用的分頁方法,它在執(zhí)行過程中刑巧,相當于先遍歷了前100個,然后取了第100到500個层宫,舍棄了前100個.但是limit僅適用于小數據范圍內的分頁查詢
小數據
select * from articles limit 170500,171000 > 查詢 193秒
當查詢170500開始的500條數據時,因為要先查詢前170500條數據,數據內容龐大,所以查詢很慢
2.通過主鍵id過濾的方法
select * from articles where id >(select id from articles limit 170500,1) limit 500
> 查詢 2.5s
- 這種方法的好處是首先通過id索引快速定位到了分頁數據的起始位置(
避免了全文檢索
)港令,并且用limit 方法快速獲取了從起始位置往后的500個數據熔号。
3.between and
select * from articles where id between (select id from articles limit 170000,1) and (select id from articles limit 170500,1)
> 查詢 2s
-
最優(yōu)方法between and
前一種方法相當于是先利用id索引的優(yōu)勢快速定位到了分頁的起始位置,然后往后截取了500條數據.between and的方法相當于也是利于id索引的優(yōu)勢,但是同時定位了分頁的起始和終止的位置,截取了中間的信息,因此速度會更快.