mysql 分頁優化 Mysql 查詢分頁優化

2021-10-25 14:33:06 字數 1863 閱讀 9947

全表掃瞄,速度極慢

limit 語句的查詢時間與起始記錄的位置成正比

mysql 的 limit 語句是很方便,但是對記錄很多的表並不適合直接使用

建立測試表:

drop table if exists `t_user`;

create table `test`.`t_user`(

`id` int(10) unsigned not null auto_increment,

`username` varchar(200) not null default '',

primary key (`id`)

# 常用的分頁查詢sql

select id,`username` from t_user limit 100,100;

select id,`username` from t_user limit 10000,100;

select id,`username` from t_user limit 1000000,100;

select id,`username` from t_user limit 5000000,100;

執行結果:

分析結論

全表掃瞄,速度極慢

limit 語句的查詢時間與起始記錄的位置成正比

mysql 的 limit 語句是很方便,但是對記錄很多的表並不適合直接使用

優化辦法(一)

利用主鍵索引來加速分頁查詢

select * from t_user where id > 1000000 limit 100;

select * from t_user where id > 1000000 and id <= 5000000+100;

分析結果:

分析語句執行:

explain select id,`name` from t_test limit 1000000,100;

explain select * from t_user where id > 1000000 limit 100;

explain select * from t_user where id > 1000000 and id <= 5000000+100;

結果如果主鍵值不連續,該怎麼分頁?

使用邏輯刪除,不會造成主鍵不連續

使用上面的優化方式即可

select * from t_user where id > 1000000 limit 100;

select * from t_user where id > 1000000 and id <= 5000000+100;

利用主鍵索引加速,再做表連線查詢

select

t.id,

t.name,

from

t_user as t

join

(select

idfrom

t_user

limit 1000000, 100) tmp

on t.id = tmp.id ;

執行結果對比

mysql的分頁優化 mysql分頁優化

有個200多萬的使用者表,顯示列表時非常慢,查了一下原來使用了limit進行分頁。前幾頁用時很少 但是後面頁數就簡直不可忍了,實際的業務邏輯還有排序,就更慢了 試試用查詢時用帶索引的鍵來確定範圍。最大的id是103948598 時間和用limit比相差幾千倍啊!使用explain 檢視一下 mysq...

mysql 分頁優化 MySQL分頁優化實驗與總結

前言 分頁的sql優化是日常開發中經常遇到的問題,筆者在此做乙個經驗總結,並附上相應的實驗過程。實驗準備 若不想親自實驗的,可以直接跳過這一節。但還是建議大家做一下實驗,眼見為實。1.安裝測試資料庫 本次實驗使用的資料是mysql官方提供的employee資料庫,mysql官方提供了一些測試資料庫,...

mysql巢狀分頁 MySQL分頁優化

最近,幫同事重寫了乙個mysql sql語句,該sql語句涉及兩張表,其中一張表是字典表 需返回乙個字段 另一張表是業務表 本身就有150個字段,需全部返回 當然,欄位的個數是否合理在這裡不予評價。平時,返回的資料大概5w左右,系統尚能收到資料。但12月31日那天,資料量大概20w,導致sql執行時...