Mysql大資料量分頁優化

2022-04-19 10:26:11 字數 1179 閱讀 7325

假設有乙個千萬量級的表,取1到10條資料;

select * from table limit 0,10;

select * from table limit 1000,10;

這兩條語句查詢時間應該在毫秒級完成;

select * from table limit 3000000,10;
你可能沒想到,這條語句執行之間在5s左右;

為什麼相差這麼大?

可能mysql並沒有你想的那麼智慧型,比如你要查詢 300w開始後面10條資料;mysql會讀取300w加10條這麼多的資料,只不過 過濾後返回最後10條而已!!!

那麼如果解決這個問題呢;這裡總結三種常用方法;

最多翻到76頁就不讓你翻了,這種方式就是從業務上解決;

select * from table where id>3000000 limit 10;
這條語句執行也是在毫秒級完成的,id>300w其實就是讓mysql直接跳到這裡了,不用依次在掃瞄全面所有的行

如果你的table的主鍵id是自增的,並且中間沒有刪除和斷點,那麼還有一種方式,比如100頁的10條資料

select * from table where id>100*10 limit 10;
最後第三種方法:延遲關聯

我們在來分析一下這條語句為什麼慢,慢在**。

select * from table limit 3000000,10;
玄機就處在這個 * 裡面,這個表除了id主鍵肯定還有其他字段  比如 name  age  之類的,因為select  *  所以mysql在沿著id主鍵走的時候要回行拿資料,走一下拿一下資料;

如果把語句改成 

select id from table limit 3000000,10;
你會發現時間縮短了一半;然後我們在拿id分別去取10條資料就行了;

語句就改成這樣了:

select table.* from table inner join ( select id from table limit 3000000,10 ) as tmp on tmp.id=table.id;
這三種方法最先考慮第一種 其次第二種,第三種是別無選擇

大資料量分頁優化

用limit offset 時並不是先跳過再查詢 而是 先查詢,再跳過 limit 100w,10 先把100w取出來,然後跳過前100w行,所以大資料分頁用limit很慢 select id,name from lx com 5000000,10 先查詢出來5000000 select id,na...

mysql大資料量分頁查詢優化

參考文章 mysql的分頁查詢十分簡單,但是當資料量大的時候一般的分頁就吃不消了。傳統分頁查詢 select c1,c2,cn from table limit n,m mysql的limit工作原理就是先讀取前面n條記錄,然後拋棄前n條,讀後面m條想要的,所以n越大,偏移量越大,效能就越差。1 盡...

MySQL大資料量分頁效能優化

mysql大資料量使用limit分頁,隨著頁碼的增大,查詢效率越低下。1.直接用limit start,count分頁語句,也是我程式中用的方法 select from product limit start,count 當起始頁較小時,查詢沒有效能問題,我們分別看下從10,100,1000,100...