SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Indeks oparty na wyrażeniach SQLite

Podsumowanie :w tym samouczku dowiesz się, jak używać indeksu opartego na wyrażeniach SQLite do zapytań o dane w celu poprawy wydajności zapytań, szczególnie dla zapytań używających wyrażenia lub funkcji.

Wprowadzenie do indeksu opartego na wyrażeniach SQLite

Kiedy tworzysz indeks, często używasz jednej lub więcej kolumn w tabeli. Oprócz normalnych indeksów, SQLite umożliwia tworzenie indeksu na podstawie wyrażeń związanych z kolumnami tabeli. Ten rodzaj indeksu nazywa się indeksem opartym na wyrażeniach.

Poniższe zapytanie wybiera klientów, których długość firmy jest większa niż 10 znaków.

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

Jeśli używasz EXPLAIN QUERY PLAN oświadczenie, okaże się, że planer zapytań SQLite musiał przeskanować wszystkich customers tabela, aby zwrócić zestaw wyników.

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

Planer zapytań SQLite to komponent oprogramowania, który określa najlepszy algorytm lub plan zapytania do wykonania instrukcji SQL. Począwszy od wersji 3.8.0 oprogramowania SQLite, komponent planowania zapytań został przepisany, aby działał szybciej i generował lepsze plany zapytań. Przepisywanie jest znane jako planer zapytań nowej generacji lub NGQP.

Aby utworzyć indeks na podstawie wyrażenia LENGTH(company) , użyj następującego oświadczenia.

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

Teraz, jeśli ponownie wykonasz powyższe zapytanie, SQLite użyje indeksu wyrażenia do wyszukania danych, co jest szybsze.

Jak działa indeks oparty na wyrażeniach SQLite

Planer zapytań SQLite używa indeksu opartego na wyrażeniach tylko wtedy, gdy wyrażenie określone w CREATE INDEX instrukcja, pojawia się tak samo, jak w klauzuli WHERE lub ORDER BY.

Na przykład w przykładowej bazie danych mamy invoice_items tabela.

Poniższa instrukcja tworzy indeks przy użyciu kolumn ceny jednostkowej i ilości.

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

Jednak po uruchomieniu następującego zapytania:

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

Planer zapytań SQLite nie użył indeksu, ponieważ wyrażenie w CREATE INDEX ( unitprice*quantity ) nie jest tym samym, co w WHERE klauzula (ilość*cena jednostkowa)

Ograniczenie indeksu oparte na wyrażeniach SQLite

Poniżej wymieniono wszystkie ograniczenia dotyczące wyrażenia, które pojawia się w CREATE INDEX oświadczenie.

  1. Wyrażenie musi odnosić się tylko do kolumn tabeli, która jest indeksowana. Nie może odnosić się do kolumn innych tabel.
  2. Wyrażenie może używać tylko deterministycznego wywołania funkcji.
  3. Wyrażenie nie może używać podzapytania.

W tym samouczku nauczyłeś się, jak używać indeksu opartego na wyrażeniach SQLite, aby poprawić wydajność zapytań.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak elastyczne/ograniczające są typy kolumn SQLite?

  2. Wyświetl wyniki zapytania SQLite za pomocą wyjścia pionowego

  3. 2 sposoby na włączenie zawijania słów w SQLite

  4. Jak zaktualizować dane w niestandardowym oknie dialogowym

  5. Nie można uzyskać dostępu do wstępnie wypełnionej bazy danych SQLite za pomocą PhoneGap/Cordova w systemie Android