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