Shrnutí :v tomto tutoriálu se naučíte, jak používat index založený na výrazu SQLite k dotazování na data, abyste zlepšili výkon dotazů, zejména u dotazů, které používají výraz nebo funkci.
Úvod do indexu založeného na výrazech SQLite
Při vytváření indexu často používáte jeden nebo více sloupců v tabulce. Kromě normálních indexů vám SQLite umožňuje vytvořit index na základě výrazů zahrnutých ve sloupcích tabulky. Tento druh indexu se nazývá index založený na výrazu.
Následující dotaz vybere zákazníky, jejichž délka společnosti je větší než 10 znaků.
SELECT customerid,
company
FROM customers
WHERE length(company) > 10
ORDER BY length(company) DESC;
Code language: SQL (Structured Query Language) (sql)
Pokud používáte EXPLAIN QUERY PLAN
zjistíte, že plánovač dotazů SQLite musel skenovat celé customers
tabulku pro vrácení sady výsledků.
EXPLAIN QUERY PLAN
SELECT customerid,
company
FROM customers
WHERE length(company) > 10
ORDER BY length(company) DESC;
Code language: SQL (Structured Query Language) (sql)
Plánovač dotazů SQLite je softwarová součást, která určuje nejlepší algoritmus nebo plán dotazů pro provedení příkazu SQL. Od verze SQLite 3.8.0 byla komponenta Plánovač dotazů přepsána, aby běžela rychleji a generovala lepší plány dotazů. Přepsání je známé jako plánovač dotazů nové generace nebo NGQP.
Chcete-li vytvořit index založený na výrazu LENGTH(company)
, použijete následující příkaz.
CREATE INDEX customers_length_company
ON customers(LENGTH(company));
Code language: SQL (Structured Query Language) (sql)
Pokud nyní znovu spustíte dotaz výše, SQLite použije k vyhledávání dat index výrazů, což je rychlejší.
Jak funguje index založený na výrazu SQLite
Plánovač dotazů SQLite používá index založený na výrazu pouze v případě, že výraz, který jste zadali v CREATE INDEX
příkaz se objeví stejně jako v klauzuli WHERE nebo ORDER BY.
Například v ukázkové databázi máme invoice_items
tabulka.
Následující příkaz vytvoří index pomocí sloupců jednotkové ceny a množství.
CREATE INDEX invoice_line_amount
ON invoice_items(unitprice*quantity);
Code language: SQL (Structured Query Language) (sql)
Však při spuštění následujícího dotazu:
EXPLAIN QUERY PLAN
SELECT invoicelineid,
invoiceid,
unitprice*quantity
FROM invoice_items
WHERE quantity*unitprice > 10;
Code language: SQL (Structured Query Language) (sql)
Plánovač dotazů SQLite nepoužil index, protože výraz v CREATE INDEX
( unitprice*quantity
) není stejný jako ten v WHERE
doložka (množství*jednotková cena)
Omezení indexu založené na výrazu SQLite
Následuje seznam všech omezení pro výraz, který se objevuje v CREATE INDEX
prohlášení.
- Výraz musí odkazovat pouze na sloupce tabulky, která je indexována. Nemůže odkazovat na sloupce jiných tabulek.
- Výraz může používat pouze volání deterministické funkce.
- Výraz nemůže používat dílčí dotaz.
V tomto tutoriálu jste se naučili, jak používat index založený na výrazu SQLite ke zlepšení výkonu dotazů.