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

วิธีเลือกแถวในช่วงเฉพาะด้วย LIMIT และ OFFSET ใน MySQL

ใช้ ORDER BY, LIMIT, OFFSET สำหรับ Pagination / ดึงช่วงแถว

LIMIT n OFFSET m ข้าม m แถวแรก แล้วเอา n แถวถัดไป ใช้ร่วม ORDER BY เพื่อกำหนดลำดับที่แน่นอน

ตัวอย่างสร้างตารางและข้อมูล 9 แถว

CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName VARCHAR(20)
);

INSERT INTO DemoTable (StudentName) VALUES
('John'), ('Carol'), ('David'), ('Bob'), ('Chris'), ('Robert'), ('Adam'), ('Mike'), ('Sam');

ข้อมูลในตาราง

+----+-------------+
| Id | StudentName |
+----+-------------+
| 1  | John        |
| 2  | Carol       |
| 3  | David       |
| 4  | Bob         |
| 5  | Chris       |
| 6  | Robert      |
| 7  | Adam        |
| 8  | Mike        |
| 9  | Sam         |
+----+-------------+

คำสั่ง: เรียง ID DESC (มาก→น้อย) ข้าม 2 แถว แล้วเอา 4 แถว

SELECT * FROM DemoTable ORDER BY Id DESC LIMIT 4 OFFSET 2;

ผลลัพธ์ (Id: 7, 6, 5, 4)

+----+-------------+
| Id | StudentName |
+----+-------------+
| 7  | Adam        |
| 6  | Robert      |
| 5  | Chris       |
| 4  | Bob         |
+----+-------------+

คำอธิบาย:

  • ORDER BY Id DESC: 9,8,7,6,5,4,3,2,1
  • OFFSET 2: ข้าม 9, 8
  • LIMIT 4: เอา 7, 6, 5, 4

รูปแบบย่อ: LIMIT 2, 4 (OFFSET 2, LIMIT 4) → LIMIT offset, row_count

⚐ ประสิทธิภาพ Pagination ตารางใหญ่:

  • OFFSET มาก → ช้า (ต้อง Scan ข้ามแถว) ใช้ Keyset Pagination แทน: WHERE Id < last_seen_id ORDER BY Id DESC LIMIT 4
  • ต้องมี Index บนคอลัมน์ ORDER BY
  • หลีกเลี่ยง OFFSET > 100,000