poniedziałek, 24 września 2018

SQLite - EXPLAIN


SQLite - EXPLAIN

Instrukcja SQLite może być poprzedzona słowem kluczowym "EXPLAIN" lub zwrotem "EXPLAIN QUERY PLAN" używanym do opisywania szczegółów tabeli.
Każda modyfikacja powoduje, że instrukcja SQLite zachowuje się jak zapytanie i zwraca informacje o tym, jak działałaby instrukcja SQLite, gdyby pominięto słowo kluczowe EXPLAIN lub wyrażenie.
·      Dane wyjściowe z EXPLAIN i EXPLAIN QUERY PLAN są przeznaczone wyłącznie do interaktywnej analizy i rozwiązywania problemów.
·      Szczegóły formatu wyjściowego mogą ulec zmianie z jednego wydania SQLite do następnego.
·      Aplikacje nie powinny używać EXPLAIN lub EXPLAIN QUERY PLAN, ponieważ ich dokładne zachowanie jest zmienne i tylko częściowo udokumentowane.
Składnia
Składnia dla EXPLAIN wygląda następująco:
EXPLAIN [SQLite Query]
Składnia dla EXPLAIN QUERY PLAN wygląda następująco:
EXPLAIN  QUERY PLAN [SQLite Query]
Przykład
Rozważ tabelę PRACOWNIK z następującymi zapisami -
id          nazwisko    wiek        adres       pensja
----------  ----------  ----------  ----------  ----------
1           Adam        32          Warszawa    2000.0
2           Piotr       25          Piaseczno   1500.0
3           Tomasz      23          Grodzisk    2000.0
4           Marek       25          Płock       6500.0
5           Dawid       27          Halinów     8500.0
6           Katarzyna   22          Warszawa    4500.0
7           Jan         24          Kraków      4500.0
8           Paweł       24          Zielonka    3500.0
9           Jan         44          Kobyłka     5000.0
10          Jan         45          Nieporęt    5000.0
Teraz sprawdźmy następujące pod-zapytanie z instrukcją SELECT -
sqlite> EXPLAIN SELECT * FROM PRACOWNIK WHERE Salary > 2000;
Spowoduje to uzyskanie następującego wyniku.
addr  opcode         p1    p2    p3    p4             p5  comment
----  -------------  ----  ----  ----  -------------  --  -------------
0     Init           0     14    0                    00  Start at 14
1     OpenRead       0     2     0     5              00  root=2 iDb=0; PRACOWNIK
2     Rewind         0     13    0                    00
3       Column         0     4     1                    00  r[1]=PRACOWNIK.pensja
4       RealAffinity   1     0     0                    00
5       Le             2     12    1     (BINARY)       55  if r[1]<=r[2] goto 12
6       Rowid          0     3     0                    00  r[3]=rowid
7       Column         0     1     4                    00  r[4]=PRACOWNIK.nazwisko
8       Column         0     2     5                    00  r[5]=PRACOWNIK.wiek
9       Column         0     3     6                    00  r[6]=PRACOWNIK.adres
10      Copy           1     7     0                    00  r[7]=r[1]
11      ResultRow      3     5     0                    00  output=r[3..7]
12    Next           0     3     0                    01
13    Halt           0     0     0                    00
14    Transaction    0     0     18    0              01  usesStmtJournal=0
15    Integer        2000  2     0                    00  r[2]=2000
16    Goto           0     1     0                    00
Teraz, sprawdźmy poniższy Explain Query Plan z instrukcją SELECT -
selectid    order       from        detail
----------  ----------  ----------  --------------------
0           0           0           SCAN TABLE PRACOWNIK


Brak komentarzy:

Prześlij komentarz