MySQL limit子句及分頁應用

Limit子句可以被用於強制 SELECT 語句返回指定的記錄數。Limit接受一個或兩個數字參數。

參數必須是一個整數常量。如果給定兩個參數,第一個參數指定第一個返回記錄行的偏移量,

第二個參數指定返回記錄行的最大數目。

//初始記錄行的偏移量是 0(而不是 1):

mysql> SELECT * FROM table LIMIT 5,10; //檢索記錄行6-15

//爲了檢索從某一個偏移量到記錄集的結束所有的記錄行,可以指定第二個參數爲 -1:

mysql> SELECT * FROM table LIMIT 95,-1; // 檢索記錄行 96-last,並非每個版本都能實現

//如果只給定一個參數,它表示返回最大的記錄行數目。換句話說,LIMIT n 等價於 LIMIT 0,n

mysql> SELECT * FROM table LIMIT 5; //檢索前 5 個記錄行

Limit的效率高?

常說的Limit的執行效率高,是對於一種特定條件下來說的:即數據庫的數量很大,但是只需要查詢一部分數據的情況。

高效率的原理是:避免全表掃描,提高查詢效率

比如:每個用戶的email是唯一的,如果用戶使用email作爲用戶名登陸的話,就需要查詢出email對應的一條記錄。

SELECT * FROM t_user WHERE email=?;

上面的語句實現了查詢email對應的一條用戶信息,但是由於email這一列沒有加索引,會導致全表掃描,效率會很低。

SELECT * FROM t_user WHERE email=? LIMIT 1;

加上LIMIT 1,只要找到了對應的一條記錄,就不會繼續向下掃描了,效率會大大提高。

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語句中,limit關鍵字是最後纔用到的。以下條件的出現順序一般是:where->group by->having-order by->limit




## 分頁應用[種子]

通過limit和offset 或只通過limit可以實現**分頁功能**。

假設 pageSize表示每頁要顯示的條數,pageNumber表示頁碼,那麼 返回第pageNumber頁,每頁條數爲pageSize的sql語句:

代碼示例:

語句3:select * from student limit (pageNumber-1)*pageSize,pageSize

語句4:select * from student limit pageSize offset (pageNumber-1)*pageSize
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章