在我看來,limit應該是我們在mysql中最經常使用到的方法了吧,下面我們就來講解一下limit的作用和如何正確地使用該方法。
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
當一個查詢語句位移量offset很大的時候,如select * from table limit 10000,10 , 最好不要直接使用limit,而是先擷取到offset的id後,再直接使用limit size來擷取資料。效果會好很多。
如:
select * From customers Where customer_id >=(
select customer_id From customers Order By customer_id limit 10000,1
) limit 10;
有興趣可以看查limit分頁最佳化教程:http://www.111cn.net/database/mysql/50921.htm