2017-01-31 2 views
1

Ich habe eine Spalte in SQLite, die eine physische ID eines Objekts enthält.Bester Datentyp für SQLite-Index

Diese physische ID besteht aus 16 Informationsbytes. Ich möchte einen Index für diese Spalte erstellen, um die Leistung von Abfragen zu optimieren.

Was ist der beste Datentyp für diese Spalte, damit der Index die beste Leistung erzielt? Sollte ich einen Text verwenden, der mein 32 Zeichen langes Hex, ein int8 (16) oder einen anderen Datentyp enthält?

Antwort

1

Verwenden Sie keinen Text, der hex enthält. Ich wette, es ist langsamer als BLOB (SQLite unterstützt BLOB PRIMARY KEY). Ganz zu schweigen von der doppelten Größe.

SQLite hat nur einen Integer-Typ. (Nein int8 oder int16.)

Wenn Ihre physische ID eine Ganzzahl ist, empfehle ich die Verwendung von INTEGER PRIMARY KEY. Es ist bequemer als BLOB, wenn Sie Werte in SQL-Anweisungen einbetten, Werte an SQL-Anweisungen binden oder Werte aus Abfrageergebnissen abrufen.

0

Normalerweise erhalten Sie eine bessere Leistung mit einem Integer-basierten Index. In diesem speziellen Fall würden Sie jedoch keinen Vorteil sehen. SQLite speichert nur ganze Zahlen bis zu 8 Bytes. Alles Größere wird als Text gespeichert.

Intern werden Text und Blob auf ähnliche Weise gespeichert (Text berücksichtigt die Datenbankcodierung, Blobs werden unverändert gespeichert.) Beide können indiziert werden, und Sie werden eine ähnliche Leistung zwischen den beiden sehen. Abhängig von Ihrem Schema, Ihren Daten und Ihren Abfragen ist ein Unterschied zwischen den beiden möglicherweise nicht auf sinnvolle Weise erkennbar. An diesem Punkt würde die Wahl wirklich kommen, zu der es leichter ist, mit Ihnen persönlich zu arbeiten.