SQLite - Clausola INDEXED BY
La clausola "INDEXED BY nome-indice" specifica che l'indice denominato deve essere utilizzato per cercare i valori nella tabella precedente.
Se nome-indice non esiste o non può essere utilizzato per la query, la preparazione dell'istruzione SQLite non riesce.
La clausola "NOT INDEXED" specifica che nessun indice deve essere utilizzato quando si accede alla tabella precedente, inclusi gli indici impliciti creati dai vincoli UNIQUE e PRIMARY KEY.
Tuttavia, INTEGER PRIMARY KEY può ancora essere utilizzato per cercare le voci anche quando è specificato "NOT INDEXED".
Sintassi
Di seguito è riportata la sintassi per la clausola INDEXED BY e può essere utilizzata con l'istruzione DELETE, UPDATE o SELECT.
SELECT|DELETE|UPDATE column1, column2...
INDEXED BY (index_name)
table_name
WHERE (CONDITION);
Esempio
Considera la tabella COMPANY Creeremo un indice e lo useremo per eseguire l'operazione INDEXED BY.
sqlite> CREATE INDEX salary_index ON COMPANY(salary);
sqlite>
Ora selezionando i dati dalla tabella AZIENDA è possibile utilizzare la clausola INDEXED BY come segue:
sqlite> SELECT * FROM COMPANY INDEXED BY salary_index WHERE salary > 5000;
Questo produrrà il seguente risultato.
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
7 James 24 Houston 10000.0
2 Allen 25 Texas 15000.0
1 Paul 32 California 20000.0
3 Teddy 23 Norway 20000.0
6 Kim 22 South-Hall 45000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0