

Tăng Tốc Truy Vấn Dữ Liệu Với INDEX Trong MySQL
- 08-07-2025
- Toanngo92
- 0 Comments
INDEX
(Chỉ Mục) trong MySQL — giúp MySQL tăng tốc độ truy vấn dữ liệu, đặc biệt với các bảng lớn và hệ thống thực tế có hàng ngàn đến hàng triệu dòng.
Mục lục
✅ 1. INDEX
là gì?
INDEX
(chỉ mục) là cấu trúc dữ liệu phụ được tạo ra để tăng tốc độ truy vấn bằng cách giúp MySQL tìm dữ liệu nhanh hơn thay vì quét toàn bộ bảng.- Tương tự như mục lục sách: thay vì đọc từng trang, bạn tra nhanh qua số thứ tự.
✅ 2. Khi nào cần dùng INDEX
?
- Bảng có dữ liệu lớn
- Truy vấn hay dùng
WHERE
,JOIN
,ORDER BY
,GROUP BY
trên một số cột nhất định - Tăng hiệu suất tìm kiếm, lọc, liên kết dữ liệu
✅ 3. Cú pháp tạo INDEX
CREATE INDEX ten_index ON ten_bang(cot1 [, cot2, ...]);
✅ 4. Ví dụ thực tế
CREATE TABLE Customers (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
phone VARCHAR(20)
);
Bạn thường truy vấn theo email
:
SELECT * FROM Customers WHERE email = '[email protected]';
→ Tạo chỉ mục:
CREATE INDEX idx_email ON Customers(email);
Lần sau truy vấn, MySQL sẽ tìm nhanh hơn vì không phải quét toàn bộ bảng.
✅ 5. Các loại INDEX
trong MySQL
Loại Index | Mô tả |
---|---|
PRIMARY KEY | Tự động là chỉ mục chính, duy nhất và không NULL |
UNIQUE | Chỉ mục duy nhất – không cho phép trùng giá trị |
INDEX (normal) | Chỉ mục thông thường – cho phép trùng |
FULLTEXT | Dùng cho tìm kiếm toàn văn (full-text search) với MATCH … AGAINST |
SPATIAL | Dùng cho dữ liệu không gian (GIS) |
✅ 6. Kiểm tra các index hiện có
SHOW INDEX FROM Customers;
✅ 7. Xóa index
DROP INDEX idx_email ON Customers;
✅ 8. Index trên nhiều cột (Composite Index)
CREATE INDEX idx_name_phone ON Customers(name, phone);
Tăng tốc truy vấn khi bạn lọc theo cả name và phone, hoặc name (nhưng không tối ưu nếu chỉ lọc
phone
).
✅ 9. Lưu ý khi dùng INDEX
Lưu ý | Giải thích |
---|---|
✅ Tăng tốc truy vấn | Đặc biệt với WHERE , JOIN , ORDER BY , GROUP BY |
❌ Làm chậm INSERT , UPDATE , DELETE | Vì MySQL phải cập nhật chỉ mục kèm theo dữ liệu |
❌ Tốn thêm dung lượng lưu trữ | Index chiếm thêm bộ nhớ |
✅ Nên tạo chỉ mục có chọn lọc cao | Những cột có nhiều giá trị khác nhau (vd: email, id), không nên index cột gender nếu chỉ có male/female |
✅ 10. Tối ưu hóa với EXPLAIN
Bạn có thể kiểm tra xem truy vấn có dùng index hay không bằng EXPLAIN
:
EXPLAIN SELECT * FROM Customers WHERE email = '[email protected]';
📌 Nếu cột key
trong kết quả có tên chỉ mục → ✅ đã dùng index.
📘 Kết Luận
INDEX
là công cụ tối ưu hóa truy vấn quan trọng nhất trong MySQL.- Sử dụng đúng lúc và đúng cột sẽ giúp hệ thống chạy nhanh, tiết kiệm tài nguyên.
- Tuy nhiên, đừng lạm dụng — vì quá nhiều chỉ mục cũng làm chậm ghi dữ liệu.