การใช้ LIMIT OFFSET สำหรับ Pagination
LIMIT n OFFSET m ข้าม m แถวแรก แล้วเอา n แถวถัดไป (ใช้ทำ Pagination)
ตัวอย่าง
mysql> create table DemoTable860(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(100) );
Query OK, 0 rows affected (0.73 sec)
mysql> insert into DemoTable860(Name) values('Chris');
mysql> insert into DemoTable860(Name) values('Robert');
mysql> insert into DemoTable860(Name) values('David');
mysql> insert into DemoTable860(Name) values('Bob');
mysql> insert into DemoTable860(Name) values('Mike');
mysql> insert into DemoTable860(Name) values('Sam');
ข้าม 2 แถวแรก เอา 3 แถวถัดไป
mysql> select * from DemoTable860 limit 3 offset 2;
ผลลัพธ์ (แถวที่ 3, 4, 5):
+----+-------+
| Id | Name |
+----+-------+
| 3 | David |
| 4 | Bob |
| 5 | Mike |
+----+-------+
รูปแบบต่างๆ
-- LIMIT offset, count (MySQL Short Syntax)
SELECT * FROM DemoTable860 LIMIT 2, 3; -- เท่ากับ OFFSET 2 LIMIT 3
-- หน้าที่ 2 (Page size = 3)
SELECT * FROM DemoTable860 ORDER BY Id LIMIT 3 OFFSET 3;
-- หน้าที่ N
SELECT * FROM DemoTable860 ORDER BY Id LIMIT 3 OFFSET (3 * (page - 1));
⚠️ ประสิทธิภาพ OFFSET ใหญ่
OFFSET 1000000ต้อง Scan/Read 1 ล้านแถวก่อน -> ช้า- ใช้ Keyset Pagination (Seek Method) แทน:
WHERE id > last_seen_id ORDER BY id LIMIT 3
สรุป
ใช้ LIMIT n OFFSET m หรือ LIMIT m, n สำหรับ Pagination ขนาดเล็ก สำหรับข้อมูลเยอะ ควรใช้ Keyset Pagination