Trong thế giới của cơ sở dữ liệu, Index (chỉ mục) đóng vai trò như mục lục của một cuốn sách – giúp truy xuất dữ liệu nhanh chóng mà không cần phải duyệt toàn bộ bảng dữ liệu. Nếu bạn đang xây dựng một hệ thống có lượng dữ liệu lớn và yêu cầu truy vấn nhanh, việc sử dụng Index là một kỹ thuật không thể bỏ qua.

1. Ưu điểm của Index

Index giúp tăng tốc độ truy vấn (SELECT) bằng cách định vị nhanh dòng dữ liệu trong bảng. Điều này đặc biệt hữu ích với các câu truy vấn có điều kiện lọc, sắp xếp, hay join nhiều bảng.

Ví dụ: thay vì phải quét toàn bộ bảng sinh viên để tìm sinh viên có mã là “SV001”, Index giúp hệ quản trị CSDL tìm trực tiếp dòng đó như tra một từ khóa trong từ điển.

2. Nhược điểm khi sử dụng Index

Tăng dung lượng lưu trữ

  • Mỗi chỉ mục (index) chiếm thêm không gian đĩa.

  • Với nhiều index, dung lượng có thể tăng đáng kể — nhất là với bảng lớn.

Giảm hiệu năng khi ghi (INSERT, UPDATE, DELETE)

  • Khi dữ liệu thay đổi, các index liên quan cũng cần được cập nhật.

  • Điều này khiến các thao tác ghi chậm hơn so với khi không có index.

Quản lý phức tạp hơn

  • Cần phân tích và theo dõi để đảm bảo index đang hỗ trợ đúng truy vấn.

  • Dễ gây dư thừa nếu tạo quá nhiều index không cần thiết.

Không phải truy vấn nào cũng tận dụng được index

  • Một số truy vấn (như truy vấn với hàm tính toán hoặc LIKE với ký tự đầu là %) có thể không tận dụng được index.

  • Khi đó, dù có index nhưng hiệu năng không cải thiện.

Index có thể bị “miss” (bỏ qua)

  • Nếu không viết truy vấn chuẩn hoặc đúng cách, hệ quản trị cơ sở dữ liệu (DBMS) có thể không sử dụng index bạn đã tạo, dẫn đến việc “tốn chỗ mà không hiệu quả”.

3. Có 2 kiểu Index chính

🔹 Clustered Index

  • Dữ liệu trong bảng được sắp xếp theo thứ tự của chỉ mục.

  • Mỗi bảng chỉ có duy nhất một Clustered Index.

  • Thường áp dụng cho Primary Key.

🧠 Ví dụ: Nếu bạn tạo Clustered Index trên ma_sinh_vien, các dòng dữ liệu trong bảng sẽ được sắp xếp tăng dần theo ma_sinh_vien.

🔹 Non-Clustered Index

  • Không sắp xếp dữ liệu vật lý trong bảng.

  • Một bảng có thể có nhiều Non-Clustered Index.

  • Thường được dùng cho các cột tra cứu, tìm kiếm phụ.

4. Khi nào nên dùng Index

Truy vấn dữ liệu lớn thường xuyên

  • Những bảng có hàng ngàn, hàng triệu dòng và thường xuyên truy vấn theo điều kiện (WHERE, JOIN, ORDER BY, GROUP BY…) sẽ hưởng lợi lớn từ Index.

Cột được lọc hoặc sắp xếp thường xuyên

  • Nếu một cột hay được dùng trong điều kiện tìm kiếm, lọc, sắp xếp — nên tạo Index cho cột đó.

Tìm kiếm với khóa chính hoặc giá trị duy nhất

  • Index giúp truy cập nhanh chóng, đặc biệt với các cột Primary Key, Unique, hoặc các trường định danh.

Dữ liệu ít thay đổi

  • Với bảng có tính chất “chỉ đọc” hoặc ít cập nhật, việc sử dụng Index gần như không có nhược điểm nào.

5. Khi nào KHÔNG nên dùng Index?

Bảng nhỏ

  • Với các bảng chỉ có vài chục dòng, việc dùng Index là dư thừa vì quét toàn bộ bảng (table scan) còn nhanh hơn.

Cột có giá trị trùng lặp cao

  • Những cột như giới tính, trạng thái… có ít giá trị khác nhau không nên dùng index vì không hiệu quả.

Cột thường xuyên bị cập nhật

  • Nếu bạn thường xuyên UPDATE, INSERT, DELETE trên cột được index, hệ thống sẽ tốn thêm tài nguyên để cập nhật chỉ mục.

Quá nhiều Index trên một bảng

  • Điều này khiến việc ghi dữ liệu chậm lại và làm tăng dung lượng lưu trữ.

6. Một số thuộc tính khác của Index

Thuộc tính Mô tả
Mỗi bảng chỉ có 1 Clustered Index Do chỉ có 1 cách sắp xếp vật lý dữ liệu
Primary Key ⇒ Clustered mặc định Tự động nếu không chỉ định khác
Unique ⇒ Non-Clustered mặc định Tự động nếu không chỉ định khác
Có thể tạo nhiều Non-Clustered Index Phù hợp cho nhiều mục đích tìm kiếm

7. Câu lệnh SQL mẫu

Tạo Clustered Index

create clustered index index_ma_sinh_vien 
on sinh_vien(ma_sinh_vien);

Tạo Non-Clustered Index

create nonclustered index index_tim_kiem_ma_ten_sinh_vien 
on sinh_vien(ma_sinh_vien, ten_sinh_vien);

Xoá Index

drop index sinh_vien(index_ma_sinh_vien);

8. Tổng kết

Clustered Index Non-Clustered Index
Sắp xếp vật lý dữ liệu Không sắp xếp vật lý
Tối đa 1 trên mỗi bảng Có thể nhiều
Thường dùng cho Primary Key Dùng cho tra cứu phụ

Việc sử dụng đúng loại Index, đúng mục đích không chỉ giúp hệ thống chạy nhanh hơn mà còn giảm tải cho cơ sở dữ liệu, tiết kiệm tài nguyên và tăng trải nghiệm người dùng.