Khi làm việc với cơ sở dữ liệu có hàng ngàn hoặc hàng triệu dòng dữ liệu, bạn sẽ bắt đầu thấy sự chậm trễ trong các truy vấn. Lúc này, chúng ta cần đến một công cụ mạnh mẽ trong tay lập trình viên SQL: Index (Chỉ mục). Bài học hôm nay sẽ giúp bạn hiểu rõ index là gì, hoạt động như thế nào và khi nào nên (hoặc không nên) dùng đến nó.
Index là gì?
Hiểu đơn giản, index giống như mục lục trong một cuốn sách. Thay vì phải lật từng trang để tìm nội dung, bạn chỉ cần nhìn vào mục lục là biết ngay trang cần đến. Trong cơ sở dữ liệu, index giúp truy vấn dữ liệu nhanh hơn bằng cách tổ chức thông tin một cách tối ưu để tìm kiếm.
Ví dụ: Bạn có một bảng users
với 100.000 bản ghi, và thường xuyên truy vấn theo email
. Nếu cột email
được đánh chỉ mục (INDEX
), việc tìm một dòng theo email = 'abc@example.com'
sẽ nhanh hơn rất nhiều.
Tạo chỉ mục (INDEX)
Cú pháp cơ bản:
CREATE INDEX index_ten ON ten_bang(ten_cot);
Ví dụ:
CREATE INDEX idx_email ON users(email);
Ngoài ra, bạn cũng có thể tạo chỉ mục trong lúc tạo bảng:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
INDEX (email)
);
Hoặc dùng ALTER TABLE
để thêm chỉ mục:
ALTER TABLE users ADD INDEX idx_email(email);
Các loại chỉ mục phổ biến
Loại Index | Mục đích |
---|---|
PRIMARY KEY | Tự động tạo chỉ mục cho khóa chính |
UNIQUE INDEX | Tạo chỉ mục với điều kiện giá trị duy nhất |
FULLTEXT INDEX | Dùng cho tìm kiếm văn bản toàn phần (MySQL hỗ trợ trên TEXT , VARCHAR ) |
MULTI-COLUMN INDEX | Đánh chỉ mục trên nhiều cột cùng lúc |
Ví dụ chỉ mục nhiều cột:
CREATE INDEX idx_name_email ON users(name, email);
Khi nào nên dùng Index?
Bạn nên dùng INDEX
khi:
- Truy vấn hay sử dụng điều kiện
WHERE
,ORDER BY
,GROUP BY
nhiều lần trên một cột. - Cột được dùng trong
JOIN
. - Truy vấn dữ liệu lớn thường xuyên và có dấu hiệu chậm lại.
Lưu ý khi dùng Index
Mặc dù index giúp tăng tốc truy vấn, nhưng nó cũng có nhược điểm:
- Tốn thêm dung lượng lưu trữ.
- Giảm hiệu suất khi thêm/sửa/xóa dữ liệu, vì hệ quản trị phải cập nhật cả chỉ mục.
- Không nên lạm dụng: đừng tạo index trên mọi cột.
Một nguyên tắc hay được áp dụng:
👉 Chỉ đánh index những cột được truy vấn nhiều hoặc có ảnh hưởng lớn đến hiệu năng.
Kiểm tra hiệu quả bằng EXPLAIN
Bạn có thể dùng lệnh EXPLAIN
để kiểm tra một câu truy vấn có sử dụng chỉ mục hay không:
EXPLAIN SELECT * FROM users WHERE email = 'abc@example.com';
Nếu thấy key: idx_email
trong kết quả → bạn đang tận dụng chỉ mục rồi đấy!
Tổng kết
- Index giúp tăng tốc truy vấn nhưng cần dùng đúng cách.
- Có nhiều loại index cho nhiều mục đích khác nhau.
- Dùng
EXPLAIN
để kiểm tra hiệu quả truy vấn. - Đừng quên rằng thêm chỉ mục cũng có chi phí về hiệu suất ghi và dung lượng.
Ở bài tiếp theo, ta sẽ tìm hiểu cách tối ưu truy vấn và tránh các lỗi làm chậm hệ thống – một kỹ năng rất thực tế khi làm việc với cơ sở dữ liệu lớn.
Nếu bạn làm việc trên một hệ thống đang chậm dần đều, thử xem đã đánh index đúng chỗ chưa nhé.
Thảo luận