天天看點

mysql---limit的使用

1.limit的用法及分頁性能分析

轉發自:https://segmentfault.com/a/1190000008859706

SELECT * FROM table LIMIT [offset,] rows | `rows OFFSET offset ` 
(LIMIT offset, `length`)
SELECT
*
FROM table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000
           

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

2.limit和order by混合使用

轉發自:https://blog.csdn.net/qiubabin/article/details/70135556

在排序字段有資料重複的情況下,會很容易出現排序結果與預期不一緻的問題。

原因是:如果你将Limit row_count與order by混用,mysql會找到排序的row_count行後立馬傳回,而不是排序整個查詢結果再傳回。如果是通過索引排序,會非常快;如果是檔案排序,所有比對查詢的行(不帶Limit的)都會被選中,被選中的大多數或者全部會被排序,直到limit要求的row_count被找到了。如果limit要求的row_count行一旦被找到,Mysql就不會排序結果集中剩餘的行了。

繼續閱讀