Tóm tắt :trong hướng dẫn này, bạn sẽ học cách sử dụng chỉ mục dựa trên biểu thức SQLite để truy vấn dữ liệu nhằm cải thiện hiệu suất truy vấn, đặc biệt đối với các truy vấn sử dụng biểu thức hoặc hàm.
Giới thiệu về chỉ mục dựa trên biểu thức SQLite
Khi bạn tạo chỉ mục, bạn thường sử dụng một hoặc nhiều cột trong bảng. Bên cạnh các chỉ mục thông thường, SQLite cho phép bạn tạo một chỉ mục dựa trên các biểu thức liên quan đến cột bảng. Loại chỉ mục này được gọi là chỉ mục dựa trên biểu thức.
Truy vấn sau đây chọn những khách hàng có độ dài của công ty lớn hơn 10 ký tự.
SELECT customerid,
company
FROM customers
WHERE length(company) > 10
ORDER BY length(company) DESC;
Code language: SQL (Structured Query Language) (sql)
Nếu bạn sử dụng EXPLAIN QUERY PLAN
, bạn sẽ thấy rằng công cụ lập kế hoạch truy vấn SQLite phải quét toàn bộ customers
bảng để trả về tập kết quả.
EXPLAIN QUERY PLAN
SELECT customerid,
company
FROM customers
WHERE length(company) > 10
ORDER BY length(company) DESC;
Code language: SQL (Structured Query Language) (sql)
Công cụ lập kế hoạch truy vấn SQLite là một thành phần phần mềm xác định thuật toán hoặc kế hoạch truy vấn tốt nhất để thực thi một câu lệnh SQL. Kể từ phiên bản SQLite 3.8.0, thành phần công cụ lập kế hoạch truy vấn đã được viết lại để chạy nhanh hơn và tạo ra các kế hoạch truy vấn tốt hơn. Phần viết lại được gọi là công cụ lập kế hoạch truy vấn thế hệ tiếp theo hoặc NGQP.
Để tạo chỉ mục dựa trên biểu thức LENGTH(company)
, bạn sử dụng câu lệnh sau.
CREATE INDEX customers_length_company
ON customers(LENGTH(company));
Code language: SQL (Structured Query Language) (sql)
Bây giờ nếu bạn thực hiện lại truy vấn ở trên, SQLite sẽ sử dụng chỉ mục biểu thức để tìm kiếm nhằm chọn dữ liệu, nhanh hơn.
Cách hoạt động của chỉ mục dựa trên biểu thức SQLite
Công cụ lập kế hoạch truy vấn SQLite chỉ sử dụng chỉ mục dựa trên biểu thức khi biểu thức mà bạn đã chỉ định trong CREATE INDEX
, xuất hiện giống như trong mệnh đề WHERE hoặc mệnh đề ORDER BY.
Ví dụ:trong cơ sở dữ liệu mẫu, chúng ta có invoice_items
bảng.
Câu lệnh sau tạo chỉ mục bằng cách sử dụng cột đơn giá và số lượng.
CREATE INDEX invoice_line_amount
ON invoice_items(unitprice*quantity);
Code language: SQL (Structured Query Language) (sql)
Tuy nhiên, khi bạn chạy truy vấn sau:
EXPLAIN QUERY PLAN
SELECT invoicelineid,
invoiceid,
unitprice*quantity
FROM invoice_items
WHERE quantity*unitprice > 10;
Code language: SQL (Structured Query Language) (sql)
Công cụ lập kế hoạch truy vấn SQLite không sử dụng chỉ mục vì biểu thức trong CREATE INDEX
(unitprice*quantity
) không giống với một trong WHERE
mệnh đề (số lượng * đơn giá)
Hạn chế chỉ mục dựa trên biểu thức SQLite
Phần sau liệt kê tất cả các hạn chế đối với biểu thức xuất hiện trong CREATE INDEX
tuyên bố.
- Biểu thức phải chỉ các cột của bảng đang được lập chỉ mục. Nó không thể tham chiếu đến các cột của các bảng khác.
- Biểu thức chỉ có thể sử dụng lệnh gọi hàm xác định.
- Biểu thức không thể sử dụng một truy vấn con.
Trong hướng dẫn này, bạn đã học cách sử dụng chỉ mục dựa trên biểu thức SQLite để cải thiện hiệu suất truy vấn.