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就不會排序結果集中剩餘的行了。