Index là gì?
Bạn có bao giờ tìm kiếm một từ trong cuốn từ điển không? Thay vì lật từng trang một, bạn sẽ tìm đến mục lục (index) ở cuối sách để nhanh chóng tìm thấy trang chứa từ cần tìm.
Index trong database cũng hoạt động tương tự như vậy. Đó là một cấu trúc dữ liệu được tạo ra để tăng tốc độ truy vấn dữ liệu trong một bảng. Index giúp hệ thống cơ sở dữ liệu định vị dữ liệu một cách nhanh chóng dựa trên các giá trị của một hoặc nhiều cột, giống như một con trỏ dẫn bạn đến đúng thông tin bạn cần.
Tại sao cần Index Database?
- Tăng tốc độ truy vấn:
- Khi bạn thực hiện một truy vấn (query) trên một bảng lớn, hệ thống cơ sở dữ liệu phải quét qua toàn bộ bảng để tìm ra các hàng đáp ứng điều kiện. Điều này có thể rất tốn thời gian, đặc biệt với các bảng lớn.
- Index giúp hệ thống chỉ cần quét qua một phần nhỏ của dữ liệu, từ đó giảm đáng kể thời gian thực hiện truy vấn.
- Cải thiện hiệu suất:
- Với tốc độ truy vấn nhanh hơn, ứng dụng của bạn sẽ hoạt động mượt mà hơn, đáp ứng người dùng nhanh chóng hơn.
- Giảm tải cho server, giúp hệ thống ổn định hơn.
- Hỗ trợ các phép toán phức tạp:
- Index giúp tối ưu hóa các phép toán như ORDER BY, GROUP BY, JOIN, … làm cho các truy vấn phức tạp trở nên hiệu quả hơ
Cấu trúc của Index
Index là một cấu trúc dữ liệu gồm:
- Cột Search Key: chứa bản sao các giá trị của cột được tạo Index
- Cột Data Reference: chứa con trỏ trỏ đến địa chỉ của bản ghi có giá trị cột index tương ứng
Cách thức hoạt động
- Cập nhật: Khi bạn cập nhật dữ liệu trong bảng, index cũng cần được cập nhật để đảm bảo tính chính xác.
- Cấu trúc: Index thường được xây dựng dựa trên cấu trúc cây B-tree, cho phép tìm kiếm nhanh chóng.
- Lưu trữ: Index được lưu trữ riêng biệt so với dữ liệu chính của bảng.
Khi nào nên tạo Index?
- Các cột tham gia vào các mối quan hệ JOIN: Index sẽ giúp kết nối các bảng nhanh chóng.
- Các cột thường xuyên được sử dụng trong điều kiện WHERE: Index sẽ giúp hệ thống nhanh chóng tìm ra các hàng phù hợp.
- Các cột được sử dụng trong mệnh đề ORDER BY: Index sẽ giúp sắp xếp dữ liệu nhanh hơn.
- Các cột được sử dụng trong mệnh đề GROUP BY: Index sẽ giúp nhóm dữ liệu hiệu quả hơn.
Một số lệnh Index Database
- Create Index trong SQL:
CREATE INDEX ten_chi_muc ON ten_bang;
- Single-Column Index trong SQL: Chỉ mục cho một cột đơn là một chỉ mục được tạo dựa trên chỉ một cột trong bảng. Cú pháp cơ bản là:
CREATE INDEX ten_chi_muc ON ten_bang (ten_cot);
- Unique index trong SQL Unique index được sử dụng không chỉ để tăng hiệu suất, mà còn cho mục đích toàn vẹn dữ liệu. Một Unique index không cho phép bất kỳ bản sao giá trị nào được chèn vào trong bảng. Cú pháp cơ bản là:
CREATE UNIQUE INDEX ten_chi_muc ON ten_bang (ten_cot);
- Composite Index trong SQL Composite Index là một chỉ mục cho hai hoặc nhiều cột trong một bảng. Cú pháp cơ bản của nó như sau:
CREATE INDEX ten_chi_muc ON ten_bang (cot1, cot2);
- Implicit Index trong SQL Implicit Index (có thể hiểu là chỉ mục ngầm định) là chỉ mục mà được tạo tự động bởi Database Server khi một đối tượng được tạo. Các chỉ mục được tạo tự động cho các ràng buộc Primary key và các ràng buộc Unique
- DROP INDEX trong SQL
DROP INDEX ten_chi_muc;
Một số lưu ý khi sử dụng
- Quá nhiều index: Việc tạo quá nhiều index có thể làm giảm hiệu suất khi cập nhật dữ liệu, vì hệ thống phải cập nhật nhiều index cùng lúc.
- Kích thước bảng: Với các bảng nhỏ, việc tạo index có thể không mang lại hiệu quả đáng kể.
- Tính chọn lọc của dữ liệu: Index sẽ hiệu quả hơn khi các giá trị trong cột index có độ phân tán cao.