天天看點

【Mysql 學習】LIMIT 的使用

--limit 的使用

 select 。。。。[LIMIT offerset_start,row_count]其中offerset_start 表上記錄的起

limit  rowstart,rowcount 類似與分頁查詢,rowstart是從第幾行開始,rowcount是包括此後幾行,

在一些情況中,當你使用LIMIT row_count而不使用HAVING時,MySQL将以不同方式處理查詢。

始偏移量,預設為0,隻需記錄資料行就可以了。row_count為顯示的行數。

---顯示第一行。

mysql> select * from emp order by birdate desc limit 1;

+-------+----------+------------+--------+

| eid   | ename    | birdate    | deptno |

| 10001 | zhangsan | 1988-09-27 |   1001 |

1 row in set (0.00 sec)

---顯示前兩行。

mysql> select * from emp order by birdate desc limit 2;

| 10003 | lily     | 1988-09-17 |   1003 |

2 rows in set (0.00 sec)

--顯示從第一行開始以後(不包括第一行)的三行資料。

注意limit顯示的時候不包括offerset_start那一行。如下面的offerset_start=1 則不包括第一行。

mysql> select * from emp order by birdate desc limit 1,3;

+-------+--------+------------+--------+

| eid   | ename  | birdate    | deptno |

| 10003 | lily   | 1988-09-17 |   1003 |

| 10002 | yangql | 1987-12-30 |   1003 |

2 rows in set (0.02 sec)

--顯示從第三行記錄開始,以後的三行,如果沒有足夠的資料,則顯示offerset_start以後的所有記錄。

mysql> select * from emp order by birdate desc limit 2,3;

mysql> select * from emp order by birdate desc limit 1,1;

+-------+-------+------------+--------+

| eid   | ename | birdate    | deptno |

| 10003 | lily  | 1988-09-17 |   1003 |

mysql> select * from emp order by birdate desc limit 1,2;

mysql> select * from emp order by birdate desc limit 0,1;

mysql> select * from emp order by birdate desc limit 0,3;

| 10002 | yangql   | 1987-12-30 |   1003 |

3 rows in set (0.00 sec)

MySQL如何優化LIMIT

·如果你用LIMIT隻選擇一些行,當MySQL選擇做完整的表掃描時,它将在一些情況下使用索引。

·如果你使用LIMIT row_count與ORDER BY,MySQL一旦找到了排序結果的第一個row_count行,将結束排序而不是排序整個表。如果使用索引,将很快。如果必須進行檔案排序(filesort),必須選擇所有比對查詢沒有LIMIT子句的行,并且在确定已經找到第1個row_count行前,必須對它們的大部分進行排序。在任何一種情況下,一旦找到了行,則不需要再排序結果的其它部分,并且MySQL不再進行排序。

·當結合LIMIT row_count和DISTINCT時,MySQL一旦找到row_count個唯一的行,它将停止。

·在一些情況下,GROUP BY能通過順序讀取鍵(或在鍵上做排序)來解決,然後計算摘要直到關鍵字的值改變

。在這種情況下,LIMIT row_count将不計算任何不必要的GROUP BY值。

·隻要MySQL已經發送了需要的行數到客戶,它将放棄查詢,除非你正使用SQL_CALC_FOUND_ROWS。

·LIMIT 0将總是快速傳回一個空集合。這對檢查查詢的有效性是有用的。當使用MySQL API時,它也可以用來得到結果列的列類型。

 (該技巧在MySQL Monitor中不工作,隻顯示Empty set;應使用SHOW COLUMNS或DESCRIBE)。

· 當伺服器使用臨時表來進行查詢時,使用LIMIT row_count子句來計算需要多少空間。

繼續閱讀