Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: ข้ามแถว (Skip Rows) ด้วย LIMIT OFFSET

การใช้ 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