1. 程式人生 > >MySQL使用LIMIT關鍵字限制查詢結果的數量

MySQL使用LIMIT關鍵字限制查詢結果的數量

1、LIMIT關鍵字的使用

查詢資料時,可能會查詢出很多的記錄。而使用者需要的記錄可能只是很少的一部分。這樣就需要來限制查詢結果的數量。LIMIT是MySQL中的一個特殊關鍵字。LIMIT子句可以對查詢結果的記錄條數進行限定,控制它輸出的行數。

語法格式1:

LIMIT m;

m:表示查詢多少條記錄。

示例:查詢CITY表,按照CITY_ID編號進行升序排列,顯示前5條記錄。

SELECT * FROM CITY
ORDER BY CITY_ID
LIMIT 5

語法格式2:

LIMIT m , n;

m:表示開始查詢的第一條記錄的編號(注意:在查詢結果中,第一個結果的記錄編號是0,而不是1)。

n:表示查詢多少條記錄。

示例:查詢CITY表,按照CITY_ID編號進行升序排列,從編號10開始,查詢後面5條記錄。

SELECT * FROM CITY
ORDER BY CITY_ID
LIMIT 10,5

執行結果:

2、Limit的效率問題

2.1 Limit的效率高?

常說的Limit的執行效率高,是對於一種特定條件下來說的:即資料庫的數量很大,但是隻需要查詢一部分資料的情況。
高效率的原理是:避免全表掃描,提高查詢效率。

比如:每個使用者的email是唯一的,如果使用者使用email作為使用者名稱登陸的話,就需要查詢出email對應的一條記錄。
SELECT * FROM t_user WHERE email=?;
上面的語句實現了查詢email對應的一條使用者資訊,但是由於email這一列沒有加索引,會導致全表掃描,效率會很低。
SELECT * FROM t_user WHERE email=? LIMIT 1;
加上LIMIT 1,只要找到了對應的一條記錄,就不會繼續向下掃描了,效率會大大提高。

2.2 Limit的效率低?

在一種情況下,使用limit效率低,那就是:只使用limit來查詢語句,並且偏移量特別大的情況

做以下實驗:
語句1:
         select * from table limit 150000,1000;
語句2:
       select * from table while id>=150000 limit 1000;
語句1為0.2077秒;語句2為0.0063秒
兩條語句的時間比是:語句1/語句2=32.968

比較以上的資料時,我們可以發現採用where...limit....效能基本穩定,受偏移量和行數的影響不大,而單純採用limit的話,受偏移量的影響很大,當偏移量大到一定後效能開始大幅下降。不過在資料量不大的情況下,兩者的區別不大。

所以應當先使用where等查詢語句,配合limit使用,效率才高

ps:在sql語句中,limt關鍵字是最後才用到的。以下條件的出現順序一般是:where->group by->having-order by->limit

附錄:OFFSET

為了與 PostgreSQL 相容,MySQL 也支援句法: LIMIT # OFFSET #。
經常用到在資料庫中查詢中間幾條資料的需求
比如下面的sql語句:
selete * from testtable limit 2,1;
 selete * from testtable limit 2 offset 1;
注意:
1.資料庫資料計算是從0開始的
2.offset X是跳過X個數據,limit Y是選取Y個數據
3.limit  X,Y  中X表示跳過X個數據,讀取Y個數據
這兩個都是能完成需要,但是他們之間是有區別的:
(1)是從資料庫中第三條開始查詢,取一條資料,即第三條資料讀取,一二條跳過
(2)是從資料庫中的第二條資料開始查詢兩條資料,即第二條和第三條。

參考資料:https://www.cnblogs.com/acm-bingzi/p/msqlLimit.html