2017-12-21 7 views
0
sqlite> .schema actor 
CREATE TABLE actor (
    id INTEGER PRIMARY KEY, name TEXT, gender TEXT 
); 
sqlite> explain query plan 
    ...> select * from actor where id = '305453'; 
0|0|0|SEARCH TABLE actor USING INTEGER PRIMARY KEY (rowid=?) 
sqlite> explain query plan 
    ...> select * from actor where name = 'Connery, Sean'; 
0|0|0|SCAN TABLE actor 
sqlite> 

SEARCH TABLE actor USING INTEGER PRIMARY KEY (rowid=?) nimmt deutlich weniger Zeit im Vergleich zu SCAN TABLE actorSUCHE TABELLE vs SCAN TABLE


Es ist offensichtlich, dass SCAN TABLE actor erschöpfende Scan actor Tabelle ist aufgrund Möglichkeit der Vervielfältigung, aber,

1) Sind SCAN TABLE & SEARCH TABLE Scannen B-TR EE oder Sequenz von Datensätzen?

2) Wenn es B-Baum ist, dann wie SEARCH TABLE Abfrage schneller?

+1

Der Primärschlüssel ist ein Index, er muss nicht jede Zeile lesen. – Barmar

+0

@Barmar Erstens, diese Abfragen scannen Reihenfolge der Datensätze oder B-Baum, in beiden Fällen. Weil B-Baum mit Primärschlüssel ist ziemlich schneller. – overexchange

Antwort

3

SEARCH TABLE bedeutet, dass es einen Index verwendet, mit dem Sie schnell Zeilen mit einem bestimmten Spaltenwert finden können. Der Primärschlüssel wird automatisch indiziert, für andere Spalten müssen Sie explizit einen Index mit dem Befehl CREATE INDEX hinzufügen. Das Durchsuchen eines B-Baums ist O (log n).

SCAN TABLE bedeutet, dass eine erschöpfende Suche durchgeführt werden muss und alle Zeilen in der Tabelle gelesen werden. Das Scannen der gesamten Tabelle ist O (n). Dies geschieht, wenn Sie eine nicht indizierte Spalte wie name in Ihrem Beispiel übereinstimmen.

Weitere Informationen zu SQLite-Indizes finden Sie unter Squeezing Performance from SQLite: Indexes? Indexes!. Eine detaillierte Dokumentation des Designs der SQLite-Indizes finden Sie unter Query Planning.

+0

Kommentare sind nicht für längere Diskussionen; Diese Konversation wurde [in den Chat verschoben] (http://chat.stackoverflow.com/rooms/161784/discussion-on-answer-by-barmar-search-table-vs-scan-table). –

Verwandte Themen