Chỉ mục (Index) là bảng tra cứu đặc biệt mà Database Search Engine có thể sử dụng để tăng nhanh thời gian và hiệu suất thu thập dữ liệu. Hiểu đơn giản, một chỉ mục là một con trỏ tới dữ liệu trong một bảng. Một chỉ mục trong một Database là tương tự như một chỉ mục trong Mục lục của cuốn sách.
Ví dụ, nếu bạn muốn tham chiếu tất cả các trang trong một cuốn sách về một chủ đề nào đó, đầu tiên bạn nghĩ ngay đến mục lục của nó, mà liệt kê tất cả các chương, chủ đề theo thứ tự và sau đó được tham chiếu tới một hoặc nhiều trang cụ thể.
Một chỉ mục giúp tăng tốc các truy vấn SELECT và các mệnh đề WHERE, nhưng nó làm chậm việc dữ liệu nhập vào, với các lệnh UPDATE và INSERT. Các chỉ mục có thể được tạo hoặc xóa mà không ảnh hưởng tới dữ liệu.
Tạo một chỉ mục bởi sử dụng lệnh CREATE INDEX, mà cho phép bạn đặt tên cho chỉ mục, xác định bảng và cột hoặc các cột nào để lập chỉ mục, và để chỉ dẫn chỉ mục là theo thứ tự tăng dần hoặc giảm dần.
Các chỉ mục cũng có thể là duy nhất, tương tự như ràng buộc UNIQUE, trong đó chỉ mục ngăn ngừa các bản sao của các bản ghi trong cột hoặc việc tổ hợp của các cột có chỉ mục.
Lệnh CREATE INDEX trong SQLite
Cú pháp cơ bản của lệnh CREATE INDEX trong SQLite như sau:
CREATE INDEX index_name ON table_name;
Single-Column Index trong SQLite
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 index_name
ON table_name (column_name);
Unique index trong SQLite
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 index_name
on table_name (column_name);
Composite Index trong SQLite
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 index_name
on table_name (column1, column2);
Tạo một Single-column index hoặc một Composite index tùy thuộc vào sự cân nhắc của bạn về các cột bạn có thể sử dụng thường xuyên trong mệnh đề WHERE của một truy vấn như là các điều kiện lọc.
Nếu chỉ có một cột được sử dụng, thì lựa chọn tốt nhất là Single-column index. Nếu có hai hoặc nhiều cột được sử dụng thường xuyên trong mệnh đề WHERE như là các bộ lọc, thì dạng chỉ mục Composite index là lựa chọn tối ưu.
Implicit Index trong SQLite
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.
Ví dụ
Trong ví dụ sau, chúng ta sẽ tạo một chỉ mục cho cột Salary trên bảng COMPANY:
sqlite> CREATE INDEX salary_index ON COMPANY (salary);
Bây giờ, liệt kê tất cả các chỉ mục có trên bảng COMPANY này bởi sử dụng lệnh .indices như sau:
sqlite> .indices COMPANY
Trong kết quả thu được, sqlite_autoindex_COMPANY_1 là một chỉ mục ngầm định mà đã được tạo khi chính bảng đó được tạo.
salary_index
sqlite_autoindex_COMPANY_1
Bạn có thể liệt kê tất cả chỉ mục trên Database như sau:
sqlite> SELECT * FROM sqlite_master WHERE type = 'index';
Lệnh DROP INDEX trong SQL
Một chỉ mục có thể bị xóa bởi sử dụng lệnh DROP INDEX trong SQLite. Bạn nên cẩn thận trong khi xóa một chỉ mục, bởi vì khi đó hiệu năng có thể chậm hơn hoặc không được cải thiện.
Cú pháp cơ bản của lệnh DROP INDEX là như sau:
DROP INDEX index_name;
Bạn có thể sử dụng lệnh sau để xóa chỉ mục đã được tạo trước đó:
sqlite> DROP INDEX salary_index;
Khi nào nên tránh sử dụng chỉ mục trong SQLite?
Mặc dù các chỉ mục nhằm mục đích để nâng cao hiệu suất của Database, nhưng đôi khi, bạn nên tránh dùng chúng. Dưới đây là một số điểm bạn cần xem xét để quyết định có nên sử dụng chỉ mục hay không:
- Các chỉ mục không nên được sử dụng trong các bảng nhỏ.
- Bảng mà thường xuyên có các hoạt động update, insert.
- Các chỉ mục không nên được sử dụng trên các cột mà chứa một số lượng lớn giá trị NULL.
- Không nên dùng chỉ mục trên các cột mà thường xuyên bị sửa đổi.