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...