Резюме :в този урок ще научите как да използвате индекса, базиран на изрази на SQLite, за запитване на данни, за да подобрите производителността на заявката, особено за заявките, които използват израз или функция.
Въведение в индекса, базиран на изрази на SQLite
Когато създавате индекс, често използвате една или повече колони в таблица. Освен нормалните индекси, SQLite ви позволява да формирате индекс на базата на изрази, включени колони на таблицата. Този вид индекс се нарича индекс, базиран на изрази.
Следната заявка избира клиентите, чиято дължина на компанията е по-голяма от 10 знака.
SELECT customerid,
company
FROM customers
WHERE length(company) > 10
ORDER BY length(company) DESC;
Code language: SQL (Structured Query Language) (sql)
Ако използвате EXPLAIN QUERY PLAN
изявление, ще откриете, че SQLite планирането на заявки е трябвало да сканира всички customers
таблица, за да върнете набора от резултати.
EXPLAIN QUERY PLAN
SELECT customerid,
company
FROM customers
WHERE length(company) > 10
ORDER BY length(company) DESC;
Code language: SQL (Structured Query Language) (sql)
Инструментът за планиране на заявки на SQLite е софтуерен компонент, който определя най-добрия алгоритъм или план за заявка за изпълнение на SQL оператор. От версия на SQLite 3.8.0 компонентът за планиране на заявки беше пренаписан, за да работи по-бързо и да генерира по-добри планове за заявки. Пренаписването е известно като планиране на заявки от следващо поколение или NGQP.
За да създадете индекс въз основа на израза LENGTH(company)
, използвате следното изявление.
CREATE INDEX customers_length_company
ON customers(LENGTH(company));
Code language: SQL (Structured Query Language) (sql)
Сега, ако изпълните отново заявката по-горе, SQLite ще използва индекса на израза за търсене, за да избере данните, което е по-бързо.
Как работи индексът, базиран на изрази на SQLite
Инструментът за планиране на заявки на SQLite използва индекса, базиран на изрази, само когато изразът, който сте посочили в CREATE INDEX
оператор, се появява по същия начин като в клаузата WHERE или клаузата ORDER BY.
Например, в примерната база данни имаме invoice_items
таблица.
Следното изявление създава индекс, използвайки колоните за единична цена и количество.
CREATE INDEX invoice_line_amount
ON invoice_items(unitprice*quantity);
Code language: SQL (Structured Query Language) (sql)
Въпреки това, когато изпълните следната заявка:
EXPLAIN QUERY PLAN
SELECT invoicelineid,
invoiceid,
unitprice*quantity
FROM invoice_items
WHERE quantity*unitprice > 10;
Code language: SQL (Structured Query Language) (sql)
Инструментът за планиране на заявки на SQLite не е използвал индекса, тъй като изразът в CREATE INDEX
( unitprice*quantity
) не е същото като това в WHERE
клауза (количество*единична цена)
Ограничение на индекса, базирано на SQLite израз
По-долу са изброени всички ограничения за израза, който се появява в CREATE INDEX
изявление.
- Изразът трябва да се отнася само за колоните на таблицата, която се индексира. Не може да се отнася до колоните на други таблици.
- Изразът може да използва само извикването на детерминирана функция.
- Изразът не може да използва подзаявка.
В този урок научихте как да използвате индекса, базиран на SQLite израз, за да подобрите производителността на заявката.