這裡分享下最近學習到的mysql分頁策略的一種方式,之後有新的優化方案會繼續更新,歡迎討論。
系統記憶體
mysql版本
引擎centos release 6.3
8g5.6.34
innodb
create
table
`data_test`
(`id`
bigint(20
)not
null
auto_increment
comment
'自增id',`
data
`varchar
(1000
)character
set utf8mb4 collate utf8mb4_unicode_ci not
null
comment
'data json 儲存'
,`c_time`
int(11)
notnull
comment
'建立時間'
,`u_time`
int(11)
notnull
comment
'更新時間',`
status
`tinyint(4
)not
null
comment
'資料狀態'
,primary
key(
`id`),
key`idx_status`(`
status`)
)engine
=innodb
auto_increment
=1000005
default
charset
=utf8 collate
=utf8_unicode_ci;
測試表資料100萬條,資料為隨機生成。
常見的mysql 分頁命令
select
*from data_test where
status=1
limit
880000,10
;
關於分頁,目前只是從m開始的n條資料,通常情況下n很小。但是,當m較大時,耗時就會比較長,如上圖所示,掃瞄行數打到了496579行。
嘗試新的分頁sql
使用 where id > 880000 後可以避免全表掃瞄,更快的定位m的位置。
可以看到,當資料量達到百萬的時候,兩種方式的時間分布為 3.11秒 與 0.00061秒
end
mysql的分頁優化 mysql分頁優化
有個200多萬的使用者表,顯示列表時非常慢,查了一下原來使用了limit進行分頁。前幾頁用時很少 但是後面頁數就簡直不可忍了,實際的業務邏輯還有排序,就更慢了 試試用查詢時用帶索引的鍵來確定範圍。最大的id是103948598 時間和用limit比相差幾千倍啊!使用explain 檢視一下 mysq...
mysql 分頁優化 Mysql 查詢分頁優化
全表掃瞄,速度極慢 limit 語句的查詢時間與起始記錄的位置成正比 mysql 的 limit 語句是很方便,但是對記錄很多的表並不適合直接使用 建立測試表 drop table if exists t user create table test t user id int 10 unsigne...
mysql 分頁優化 MySQL分頁優化實驗與總結
前言 分頁的sql優化是日常開發中經常遇到的問題,筆者在此做乙個經驗總結,並附上相應的實驗過程。實驗準備 若不想親自實驗的,可以直接跳過這一節。但還是建議大家做一下實驗,眼見為實。1.安裝測試資料庫 本次實驗使用的資料是mysql官方提供的employee資料庫,mysql官方提供了一些測試資料庫,...