Index trong SQLite

Trong bài học hôm nay chúng ta sẽ cùng tìm hiểu về một khái niệm khá quan trong SQLite đó là index. Vậy index là gì? Có mấy loại index? Khi nào nên sử dụng và khi nào không nên sử dụng index? Chúng ta sẽ cùng tìm hiểu trong nội dung tiếp theo.

1. Index trong SQLite là gì?

Index là bảng tra cứu đặc biệt mà database search engine có thể sử dụng để tăng tốc độ truy xuất dữ liệu. Nói một cách đơn giản, một index là một con trỏ tới dữ liệu trong một bảng. Một index trong cơ sở dữ liệu rất giống với mục lục của một cuốn sách.

Ví dụ trong thực tế nếu bạn muốn tham khảo tất cả các trang trong một cuốn sách thảo luận về một chủ đề nhất định nào đó, trước tiên bạn cần tham khảo mục lục, liệt kê tất cả các chủ đề theo thứ tự bảng chữ cái và sau đó tham chiếu đến một hoặc nhiều số trang cụ thể.

Một index 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 câu lệnh UPDATEINSERT. Các index có thể được tạo hoặc xóa đi mà không ảnh hưởng đến dữ liệu.

Để tạo một index chúng ta sử dụng câu lệnh CREATE INDEX, chúng ta có thể đặt tên cho index, chỉ rõ bảng và cột hoặc nhiều cột để tạo index và  thiết lập index đó theo thứ tự tăng dần hay giảm dần.

Các index cũng có thể là duy nhất, tương tự như ràng buộc UNIQUE, trong đó index ngăn các bản sao trong một cột hoặc kết hợp các cột có index.

2. Lệnh CREATE INDEX trong SQLite

Sau đây là cú pháp cơ bản của CREATE INDEX trong SQLite.

CREATE INDEX index_name ON table_name;

Single-Column Index trong SQLite

Single-Column index là một index được tạo dựa trên chỉ một cột trong bảng. Cú pháp như sau:

CREATE INDEX index_name
ON table_name (column_name);

Unique Index trong SQLite

Unique index trong SQLite được sử dụng không chỉ cho việc tăng hiệu suất, mà còn cho tính toàn vẹn dữ liệu. Unique index không cho phép bất kỳ giá trị trùng lặp nào được chèn vào bảng. Cú pháp như sau:

CREATE UNIQUE INDEX index_name
on table_name (column_name);

Composite Index trong SQLite

Composite Index là một index cho hai hoặc nhiều cột của bảng. Cú pháp như sau:

CREATE INDEX index_name
on table_name (column1, column2);

Dù là tạo Single-column index hoặc một Composite index, hãy cân nhắc các cột mà bạn có thể sử dụng thường xuyên trong mệnh đề WHERE của một truy vấn như là điều kiện lọc.

Nếu chỉ có một cột trong bảng được sử dụng, thì lựa chọn tốt nhất sẽ là single-column index. Nếu có hai hoặc nhiều cột thường được sử dụng trong mệnh đề WHERE như là bộ lọc, thì composite index sẽ là lựa chọn tốt nhất.

Implicit Index trong SQLite

Implicit index là các index được tự động tạo bởi máy chủ cơ sở dữ liệu khi một đối tượng được tạo. Các index được tự động tạo cho các ràng buộc khóa chính và các ràng buộc duy nhất.

3. Ví dụ Index trong SQLite

Ví dụ sau đây chúng ta sẽ tạo một index cho cột salary trong bảng COMPANY.

sqlite> CREATE INDEX salary_index ON COMPANY (salary);

Bây giờ chúng ta có thể liệt kê tất cả các index có sẵn trong bảng COMPANY bằng cách sử dụng lệnh .indices như sau:

sqlite> .indices COMPANY

Điều này sẽ tạo ra kết quả sau, trong đó sqlite_autoindex_COMPANY_1 là một implicit index được tạo khi chính bảng COMPANY được tạo.

salary_index
sqlite_autoindex_COMPANY_1

Bạn có thể liệt kê tất cả index trong database như sau:

sqlite> SELECT * FROM sqlite_master WHERE type = 'index';

4. Lệnh DROP INDEX trong SQLite.

Để xóa index trong SQLite các bạn có thể sử dụng lệnh DROP. Các bạn cần phải thận trọng khi xóa index vì hiệu suất có thể bị chậm hơn hoặc không được cải thiện.

Cú pháp như sau:

DROP INDEX index_name;

Bạn có thể sử dụng câu lệnh sau để xóa index đã tạo trước đó.

sqlite> DROP INDEX salary_index;

5. Khi nào nên tránh tạo index trong SQLite.

Mặc dù các index được sử dụng để tăng cường hiệu suất của cơ sở dữ liệu, nhưng có một số trường hợp chúng ta không nên sử dụng index. Các hướng dẫn sau đây cho biết khi nào chúng ta không nên sử dụng index.

Index không nên được sử dụng trong các trường hợp sau:

  • Các bảng nhỏ
  • Các bạn có các hoạt động update hoặc insert thường xuyên
  • Các cột chứa số lượng lớn giá trị null
  • Các cột thường xuyên bị sửa đổi

-------------------#####-------------------

Loạt bài SQLite được biên dịch từ TutorialsPoint.

Khóa học nên xem

Nguồn: freetuts.net