MySQL的limit使用及解決超大分頁問題

2021-10-19 14:30:31 字數 1487 閱讀 5310

limit語法支援兩個引數,offset和limit,前者表示偏移量,後者表示取前limit條資料.

例如:返回符合條件的前10條語句

select

*from

user

limit

10

返回符合條件的第11-20條資料
select

*from

user

limit10,

20

複製**從上面也可以看出來,limit n等價於limit 0,n.

select

*from

user

limit0,

100---------耗時0.03s

select

*from

user

limit

10000

,100

---------耗時0.05s

select

*from

user

limit

100000

,100

---------耗時0.13s

select

*from

user

limit

500000

,100

---------耗時0.23s

select

*from

user

limit

1000000

,100

---------耗時0.50s

select

*from

user

limit

1800000

,100

---------耗時0.98s

可以看到隨著offset的增大,效能越來越差.

這是為什麼呢?因為limit 10000,10的語法實際上是mysql查詢到前10010條資料,之後丟棄前面的10000行,這個步驟其實是浪費掉的.

1. 用id優化

先找到上次分頁的最大id,然後利用id上的索引來查詢,類似於

select * from user where id>1000000 limit 100.

2.用覆蓋索引優化

mysql的查詢完全命中索引的時候,稱為覆蓋索引,是非常快的,因為查詢只需要在索引上進行查詢,之後可以直接返回,而不用再回資料表拿資料.因此我們可以先查出索引的id,然後根據id拿資料.

select

*from

(select id from job limit

1000000

,100

) a left

join job b on a.id = b.id;

MySQL下Limit使用及效能分析

對於一直用oracle的我,今天可是非常詫異,mysql中同乙個函式在不同數量級上的效能居然差距如此之大。先看錶ibmng id,title,info 唯一 id key 索引title 先看看兩條語句 select from ibmng limit 1000000,10 select from i...

MySQL 中LIMIT的使用詳解

在使用資料庫過程中,常會遇到查詢或者匯出某個資料表或者查詢集的前幾條或者後幾條記錄,limit可以很好的滿足需求。如果只給定乙個引數,表示記錄數。mysql select from orange limit 5 檢索前5條記錄 1 5 相當於mysql select from orange limi...

mysql的limit經典用法及優化

用法一select keyword rank from keyword rank where advertiserid 59 limit 2offset 1 比如這個sql limit後面跟的是2條資料,offset後面是從第1條開始讀取。用法二select keyword rank from ke...