SQLite - INDEXED BY Klauzula

Klauzula „INDEXED BY nazwa-indeksu” określa, że ​​w celu wyszukania wartości w poprzedniej tabeli należy użyć wskazanego indeksu.

Jeśli nazwa-indeksu nie istnieje lub nie można jej użyć w zapytaniu, przygotowanie instrukcji SQLite kończy się niepowodzeniem.

Klauzula „NOT INDEXED” określa, że ​​żaden indeks nie będzie używany podczas uzyskiwania dostępu do poprzedniej tabeli, w tym niejawnych indeksów utworzonych przez ograniczenia UNIQUE i PRIMARY KEY.

Jednak INTEGER PRIMARY KEY nadal może być używany do wyszukiwania wpisów, nawet jeśli określono „NOT INDEXED”.

Składnia

Poniżej przedstawiono składnię klauzuli INDEXED BY i można jej używać z instrukcją DELETE, UPDATE lub SELECT.

SELECT|DELETE|UPDATE column1, column2...
INDEXED BY (index_name)
table_name
WHERE (CONDITION);

Przykład

Rozważ tabelę COMPANY Stworzymy indeks i użyjemy go do wykonania operacji INDEXED BY.

sqlite> CREATE INDEX salary_index ON COMPANY(salary);
sqlite>

Teraz wybierając dane z tabeli COMPANY możesz użyć klauzuli INDEXED BY w następujący sposób -

sqlite> SELECT * FROM COMPANY INDEXED BY salary_index WHERE salary > 5000;

Spowoduje to następujący wynik.

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