Đăng nhập

Bài 28: Index – Tăng tốc truy vấn

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 IndexMục đích
PRIMARY KEYTự động tạo chỉ mục cho khóa chính
UNIQUE INDEXTạo chỉ mục với điều kiện giá trị duy nhất
FULLTEXT INDEXDù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

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.