sql >> Databáze >  >> RDS >> SQLite

Index založený na SQLite Expression

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í.

  1. Výraz musí odkazovat pouze na sloupce tabulky, která je indexována. Nemůže odkazovat na sloupce jiných tabulek.
  2. Výraz může používat pouze volání deterministické funkce.
  3. 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ů.


  1. Jak najdu znaky Unicode/non-ASCII v poli NTEXT v tabulce SQL Server 2005?

  2. TransactSQL ke spuštění jiného skriptu TransactSQL

  3. jaký je rozdíl mezi klíčovým slovem spojení a klíčovým slovem vnitřního spojení v Oracle SQL?

  4. Vložte obrázek do databáze postgresql