Index đa cột (composite index / multi-column index) trong MySQL được tạo bằng từ khóa KEY hoặc INDEX theo sau là danh sách cột trong ngoặc đơn. Thứ tự cột trong index rất quan trọng cho hiệu năng truy vấn.
Ví dụ minh họa
Tạo bảng với index 3 cột (StudentId, StudentMarks, StudentAge):
mysql> CREATE TABLE DemoTable1437 (
StudentId INT,
StudentName VARCHAR(20),
StudentMarks INT,
StudentAge INT,
KEY (StudentId, StudentMarks, StudentAge)
);
Kiểm tra cấu trúc (cột Key = MUL nghĩa là có index):
mysql> DESC DemoTable1437;
+--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | StudentId | int(11) | YES | MUL | NULL | | | StudentName | varchar(20) | YES | | NULL | | | StudentMarks | int(11) | YES | | NULL | | | StudentAge | int(11) | YES | | NULL | | +--------------+-------------+------+-----+---------+-------+
Chèn dữ liệu:
mysql> INSERT INTO DemoTable1437 VALUES (101, 'Chris', 78, 21); mysql> INSERT INTO DemoTable1437 VALUES (102, 'David', 89, 22);
Quy tắc sử dụng Composite Index (Leftmost Prefix Rule)
Index (A, B, C) có thể dùng cho các truy vấn:
| WHERE / ORDER BY | Dùng index? | Lý do |
|---|---|---|
A | ✅ Có | Prefix đầu tiên |
A, B | ✅ Có | Prefix 2 cột đầu |
A, B, C | ✅ Có | Toàn bộ index |
B hoặc B, C | ❌ Không | Thiếu cột đầu A |
A, C | ⚠️ Một phần | Chỉ dùng cột A, bỏ qua B |
Cú pháp tạo index khác
EXPLAIN SELECT * FROM DemoTable1437 WHERE StudentId = 101 AND StudentMarks > 80;
Cột key trong kết quả EXPLAIN sẽ hiển thị tên index được sử dụng.