Wenn eine Ganzzahlspalte in einer SQLite-Tabelle als Primärschlüssel markiert ist, sollte auch explizit ein Index dafür erstellt werden? SQLite scheint nicht automatisch einen Index für eine Primärschlüsselspalte zu erstellen, indiziert ihn aber möglicherweise trotzdem, je nach Zweck? (Ich werde die ganze Zeit in dieser Spalte suchen).
Wäre die Situation für einen String-Primärschlüssel anders?
quelle
sqlite_master
Tabelle mit einem Namen erwähnt, der mit beginntsqlite_autoindex_
.UNIQUE
Index (oder eineUNIQUE
Einschränkung) für die übergeordneten / referenzierten Felder erstellen, wenn diese nicht vorhanden sind. Es wird empfohlen, dass die untergeordneten / referenzierenden Felder einen Index haben (der normalerweise nicht eindeutig ist): siehe hierSQL Data Constraints
hier sagt: In den meisten Fällen werden UNIQUE- und PRIMARY KEY-Einschränkungen implementiert, indem ein eindeutiger Index in der Datenbank erstellt wird. (Die Ausnahmen sind INTEGER PRIMARY KEY und PRIMARY KEYs für WITHOUT ROWID-Tabellen.) Die Antwort ist also nicht immer wahr?Wenn eine Spalte mit INTEGER PRIMARY KEY markiert ist, ist sie ungefähr doppelt so schnell wie eine ähnliche Suche, bei der ein anderer PRIMARY KEY oder ein indizierter Wert angegeben wird . Das ist weil:
Siehe: http://www.sqlite.org/lang_createtable.html#rowid
quelle
Eine Datenbank erstellt immer stillschweigend einen Index für einen eindeutigen Primärschlüssel, damit sie intern effizient überprüfen kann, ob er eindeutig ist.
Nachdem es erstellt wurde, wird es bei Bedarf verwendet.
Es wird natürlich nicht immer geclustert, und Sie geben normalerweise im Schema an, ob dies gewünscht wird.
quelle