深刻剖析Mysql中limit的用法。本站提示廣大學習愛好者:(深刻剖析Mysql中limit的用法)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻剖析Mysql中limit的用法正文
Mysql中limit的用法:在我們應用查詢語句的時刻,常常要前往前幾條或許中央某幾行數據,這個時刻怎樣辦呢?不消擔憂,mysql曾經為我們供給了如許一個功效。
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
LIMIT 子句可以被用於強迫 SELECT 語句前往指定的記載數。LIMIT 接收一個或兩個數字參數。參數必需是一個整數常量。假如給定兩個參數,第一個參數指定第一個前往記載行的偏移量,第二個參數指定前往記載行的最年夜數量。初始記載行的偏移量是 0(而不是 1): 為了與 PostgreSQL 兼容,MySQL 也支撐句法: LIMIT # OFFSET #。
mysql> SELECT * FROM table LIMIT 5,10; // 檢索記載行 6-15
//為了檢索從某一個偏移量到記載集的停止一切的記載行,可以指定第二個參數為 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 檢索記載行 96-last.
//假如只給定一個參數,它表現前往最年夜的記載行數量:
mysql> SELECT * FROM table LIMIT 5; //檢索前 5 個記載行
//換句話說,LIMIT n 等價於 LIMIT 0,n。
留意limit 10和limit 9,1的分歧:
例如:
1.
Select * From cyclopedia Where ID>=(
Select Max(ID) From (
Select ID From cyclopedia Order By ID limit 90001
) As tmp
) limit 100;
2.
Select * From cyclopedia Where ID>=(
Select Max(ID) From (
Select ID From cyclopedia Order By ID limit 90000,1
) As tmp
) limit 100;
異樣是取90000條後100筆記錄,第1句快照樣第2句快?
第1句是先取了前90001筆記錄,取個中最年夜一個ID值作為肇端標識,然後應用它可以疾速定位下100筆記錄
第2句擇是僅僅取90000筆記錄後1條,然後取ID值作肇端標識定位下100筆記錄
第1句履行成果.100 rows in set (0.23) sec
第2句履行成果.100 rows in set (0.19) sec
其實第2句完整可以簡化成:
Select * From cyclopedia Where ID>=(
Select ID From cyclopedia limit 90000,1
)limit 100;
直接應用第90000筆記錄的ID,不消經由Max運算,如許做實際上效力因該高一些,但在現實應用中簡直看不到後果,由於自己定位ID前往的就是1筆記錄,Max簡直不消運作就可以獲得成果,但如許寫更清淅晴明,省去了畫蛇那一足.
Select Top 100 * From cyclopedia Where ID>=(
Select Top 90001 Max(ID) From (
Select ID From cyclopedia Order By ID
) As tmp
)
但不論是完成方法是存貯進程照樣直接代碼中,瓶頸一直在於MS-SQL的TOP老是要前往前N個記載,這類情
況在數據量不年夜時感觸感染不深,但假如成百上萬萬,效力確定會低下的.比擬之下MySQL的limit就有優勢的多
,履行:
Select ID From cyclopedia limit 90000
Select ID From cyclopedia limit 90000,1
的成果分離是:
90000 rows in set (0.36) sec
1 row in set (0.06) sec
而MS-SQL只能用Select Top 90000 ID From cyclopedia 履行時光是390ms,履行異樣的操作時光也不及MySQL的360ms.
limit的offset(偏移量)用於記載較多的時刻,記載較少時,偏移offset較小,直接應用limit較優。offset越年夜,後者越優。
1、offset比擬小的時刻。
select * from yanxue8_visit limit 10,10
屢次運轉,時光堅持在0.0004-0.0005之間
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10,1
) limit 10
屢次運轉,時光堅持在0.0005-0.0006之間,重要是0.0006
結論:偏移offset較小的時刻,直接應用limit較優。這個顯示是子查詢的緣由。
2、offset年夜的時刻。
select * from yanxue8_visit limit 10000,10
屢次運轉,時光堅持在0.0187閣下
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10000,1
) limit 10
屢次運轉,時光堅持在0.0061閣下,只要前者的1/3。可以事後offset越年夜,後者越優。
mysql> SELECT * FROM table LIMIT 95,-1; // 檢索記載行 96-last.
//假如只給定一個參數,它表現前往最年夜的記載行數量
以上所述就是本文的全體內容了,願望年夜家可以或許愛好。
請您花一點時光將文章分享給您的同伙或許留下評論。我們將會由衷感激您的支撐!