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

คิวรี่เลือก Top N แถวอย่างมีประสิทธิภาพใน MySQL

ใช้ดัชนี (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)