ใช้ดัชนี (index) เพื่อเลือก Top N แถวอย่างมีประสิทธิภาพครับ
สร้างตารางตัวอย่าง
mysql> create table DemoTable (StudentName varchar(100), StudentScore int); Query OK, 0 rows affected (0.66 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable values('John', 34);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Carol', 55);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Bob', 58);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Sam', 38);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Mike', 48);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Adam', 41);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Chris', 47);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Robert', 40);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('David', 89);
Query OK, 1 row affected (0.18 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
ผลลัพธ์
+-------------+--------------+ | StudentName | StudentScore | +-------------+--------------+ | John | 34 | | Carol | 55 | | Bob | 58 | | Sam | 38 | | Mike | 48 | | Adam | 41 | | Chris | 47 | | Robert | 40 | | David | 89 | +-------------+--------------+ 9 rows in set (0.00 sec)
คำสั่งเลือก Top N แถวอย่างมีประสิทธิภาพ
mysql> alter table DemoTable ADD INDEX name_score(StudentName, StudentScore); Query OK, 0 rows affected (0.61 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> select StudentName, StudentScore from DemoTable order by StudentScore LIMIT 5, 3;
ผลลัพธ์
+-------------+--------------+ | StudentName | StudentScore | +-------------+--------------+ | Mike | 48 | | Carol | 55 | | Bob | 58 | +-------------+--------------+ 3 rows in set (0.00 sec)
คำอธิบาย: สร้างดัชนีรวม (composite index) บน (StudentName, StudentScore) แล้ว ORDER BY StudentScore LIMIT offset, count - ข้าม 5 แถวแรก แสดง 3 แถวถัดไป (อันดับ 6-8)