mysql 分頁優化策略(一)

2021-10-08 04:17:26 字數 1847 閱讀 5620

這裡分享下最近學習到的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官方提供了一些測試資料庫,...