Ich habe eine SQLite-Datenbank, in der alle Primärschlüssel GUIDs sind. Momentan werden sie als Strings fester Länge gespeichert, aber ich möchte sie als Blobs speichern, da sie den Code zum Speichern und Abrufen von Daten vereinfacht. Ich habe einen Teil der Datenbank konvertiert und alles funktioniert wie erwartet. Ich bin mir jedoch nicht sicher, ob ich Leistungsprobleme bekommen werde.
Wäre eine Anweisung wie diese beispielsweise in Strings schneller als in Blobs?
%Vor%Meine Intuitionen sagen nein, aber das bedeutet eigentlich gar nichts.
Der beste Weg, das herauszufinden, besteht darin, die Abfragen gegen den Timer eines Profilers / SQLite auszuführen. Richten Sie einen Test ein und führen Sie die Abfrage 1000 Mal mit einer Zeichenfolge und dann 1000 Mal als Blob aus. Der Gewinner ist der Schnellste.
Intuition ist eine Sache, harte Daten sind eine andere.
Ein Primärschlüssel wird oft indexiert und zum Sortieren verwendet. Ein BLOB
kann nicht indexiert werden, was es zum langsamsten aller Datentypen macht. In der Tat ist es die schlechteste Wahl als Primärschlüssel und die meisten Datenbanken, einschließlich des SQL99-Standards, verbieten dies.
Das Problem mit BLOB
ist, dass sein Datentyp der Datenbank nicht bekannt ist (ein BLOB
sollte nur für alles undefinierte verwendet werden, wie ein Logo, ein Bild, ein Word-Dokument, das nur als gespeichert werden kann Binärdaten). Daher kann es nicht optimiert werden. Ein anderes Problem ist die Anzeige. Ein Blob kann nicht einfach als Text angezeigt werden.
Die meisten SQL-Implementierungen lassen BLOB
Felder nicht zu, aber SQLite erlaubt dies. Es konvertiert jedoch alles, was Sie zu einem Blob vergleichen und vergleicht es dann Stück für Stück.
Die beste Option für eine Primärschlüsselspalte in SQLite ist die Verwendung des INTEGER PRIMARY KEY
wie hier beschrieben: Ссылка es gibt die beste Leistung (es ist schon da als die rowid
Spalte, es ist nur Aliasing).
Um Ihre Frage zu beantworten: Ja, es beeinflusst die Leistung schlecht. Vor allem aber wird es sehr schwierig sein, Ihre Tabellen gut zu verwalten. Verwenden Sie INTEGER PRIMARY KEY
, es ist wirklich das beste, garantiert einzigartig und ist unglaublich schnell.
Tags und Links sql sqlite performance