Giới thiệu
Kết hợp ORDER BY ... DESC với LIMIT để lấy top N bản ghi theo thứ tự giảm dần.
Cú pháp
SELECT * FROM table ORDER BY column DESC LIMIT n;
Hoặc có offset: LIMIT offset, n (bỏ qua offset dòng đầu).
Ví dụ minh họa
Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserName VARCHAR(100)
);
mysql> INSERT INTO DemoTable (UserName) VALUES
('Chris'), ('Robert'), ('Bob'), ('David'), ('Mike');
Xem dữ liệu (UserId tăng dần)
mysql> SELECT * FROM DemoTable;
+--------+----------+ | UserId | UserName | +--------+----------+ | 1 | Chris | | 2 | Robert | | 3 | Bob | | 4 | David | | 5 | Mike | +--------+----------+
Lấy 3 UserId lớn nhất (mới nhất)
mysql> SELECT * FROM DemoTable ORDER BY UserId DESC LIMIT 0, 3;
LIMIT 0, 3 = offset 0, lấy 3 dòng. Tương đương LIMIT 3.
Kết quả
+--------+----------+ | UserId | UserName | +--------+----------+ | 5 | Mike | | 4 | David | | 3 | Bob | +--------+----------+
Lưu ý về LIMIT
LIMIT n: Lấy n dòng đầu (offset = 0).LIMIT offset, n: Bỏ qua offset dòng, lấy n dòng tiếp theo.LIMIT n OFFSET offset: Cú pháp chuẩn SQL (MySQL cũng hỗ trợ).- Phân trang: Trang 1:
LIMIT 0, 10, Trang 2:LIMIT 10, 10...
Hiệu năng
- Cần index trên cột ORDER BY để tránh filesort.
LIMITvới offset lớn (vd: LIMIT 1000000, 10) chậm vì phải scan qua offset dòng. Giải pháp: Seek pagination (WHERE id > last_seen_id).