SQLite
 sql >> Database >  >> RDS >> SQLite

Indice basato su espressioni SQLite

Riepilogo :in questo tutorial imparerai come utilizzare l'indice basato su espressioni SQLite per eseguire query sui dati per migliorare le prestazioni delle query, in particolare per le query che utilizzano espressioni o funzioni.

Introduzione all'indice basato su espressioni SQLite

Quando crei un indice, usi spesso una o più colonne in una tabella. Oltre ai normali indici, SQLite consente di formare un indice basato su espressioni coinvolte nelle colonne della tabella. Questo tipo di indice è chiamato indice basato su espressioni.

La query seguente seleziona i clienti la cui lunghezza dell'azienda è maggiore di 10 caratteri.

SELECT customerid,
       company
  FROM customers
 WHERE length(company) > 10
 ORDER BY length(company) DESC;Code language: SQL (Structured Query Language) (sql)

Se utilizzi il EXPLAIN QUERY PLAN istruzione, scoprirai che il pianificatore di query SQLite ha dovuto scansionare l'intero customers tabella per restituire il set di risultati.

EXPLAIN QUERY PLAN
SELECT customerid,
       company
  FROM customers
 WHERE length(company) > 10
 ORDER BY length(company) DESC;Code language: SQL (Structured Query Language) (sql)

Il pianificatore di query SQLite è un componente software che determina il miglior algoritmo o piano di query per eseguire un'istruzione SQL. A partire dalla versione 3.8.0 di SQLite, il componente del pianificatore di query è stato riscritto per funzionare più velocemente e generare piani di query migliori. La riscrittura è nota come pianificatore di query di nuova generazione o NGQP.

Per creare un indice basato sull'espressione LENGTH(company) , utilizzi la seguente istruzione.

CREATE INDEX customers_length_company 
ON customers(LENGTH(company));Code language: SQL (Structured Query Language) (sql)

Ora, se esegui di nuovo la query sopra, SQLite utilizzerà l'indice di espressione per cercare per selezionare i dati, il che è più veloce.

Come funziona l'indice basato su espressioni SQLite

Il pianificatore di query SQLite utilizza l'indice basato sull'espressione solo quando l'espressione specificata in CREATE INDEX istruzione, appare come nella clausola WHERE o nella clausola ORDER BY.

Ad esempio, nel database di esempio, abbiamo invoice_items tabella.

L'istruzione seguente crea un indice utilizzando le colonne prezzo unitario e quantità.

CREATE INDEX invoice_line_amount 
ON invoice_items(unitprice*quantity);Code language: SQL (Structured Query Language) (sql)

Tuttavia, quando esegui la seguente query:

EXPLAIN QUERY PLAN 
SELECT invoicelineid,
       invoiceid, 
       unitprice*quantity
FROM invoice_items
WHERE quantity*unitprice > 10;Code language: SQL (Structured Query Language) (sql)

Il pianificatore di query SQLite non ha utilizzato l'indice perché l'espressione in CREATE INDEX ( unitprice*quantity ) non è la stessa di quella in WHERE clausola (quantità*prezzo unitario)

Restrizione dell'indice basata su espressioni SQLite

Di seguito sono elencate tutte le restrizioni sull'espressione che appare in CREATE INDEX dichiarazione.

  1. L'espressione deve fare riferimento solo alle colonne della tabella che viene indicizzata. Non può fare riferimento alle colonne di altre tabelle.
  2. L'espressione può utilizzare solo la chiamata di funzione deterministica.
  3. L'espressione non può utilizzare una sottoquery.

In questo tutorial, hai imparato come utilizzare l'indice basato sull'espressione SQLite per migliorare le prestazioni della query.