2017-01-20 7 views
1

Was ist der schnellste Weg zu überprüfen, ob ein Datensatz existiert, wenn ich den Primärschlüssel kenne? select, count, filter, where oder etwas anderes?Schnellste Art zu überprüfen, ob ein Datensatz existiert

+0

COUNT (id) FROM Tabelle WHERE table.id = "KEY" 'wahrscheinlich das ideal ist, wie es von Vorteil, jede Teil Lookup Fähigkeit nehmen (besonders schnell in säulen Datenbanken wie amazon Rotverschiebung) und die Primärschlüssel-Indizierung. – TemporalWolf

+0

Der schnellste Weg ist die Anzahl der angegebenen Optionen. Um roher zu werden, verwenden Sie sqlite3_column_count() direkt von den sqlite-Quellen, indem Sie eine benutzerdefinierte Hash-Liste führen. – Jerry

Antwort

1

Sie können sich über EXPLAIN QUERY PLAN überprüfen, die Ihnen die Kosten & mitteilen wird, was es für eine bestimmte Abfrage zu tun beabsichtigt.

Die Kosten vergleichen nicht direkt zwischen Läufen, aber Sie sollten eine vernünftige Vorstellung davon bekommen, ob es große Unterschiede gibt.

aber sagen, dass ich würde erwarten, COUNT(id) FROM table WHERE table.id="KEY" ist wahrscheinlich das ideal, da sie den Vorteil eines Teil Lookup Fähigkeit (besonders schnell in columnar databases wie Amazons Rotverschiebung) und der Primärschlüssel Indizierung stattfinden wird.

1

Wenn Sie count verwenden, muss die Datenbank die Suche fortsetzen, auch wenn sie den Datensatz gefunden hat, da möglicherweise ein zweiter vorhanden ist. Sie sollten also nach dem tatsächlichen Datensatz suchen und der Datenbank nach dem ersten anhalten.

Wenn Sie nach Daten aus dem Datensatz fragen, muss die Datenbank diese Daten aus der Tabelle lesen. Aber wenn der Datensatz gefunden werden kann, indem die ID in einem Index nachgeschlagen wird, wäre dieser Tabellenzugriff überflüssig. Sie sollten also nichts anderes als die ID kehren Sie zurück zur Suche verwenden:

SELECT id FROM MyTable WHERE id = ? LIMIT 1; 

Wie auch immer, nicht die eigentlichen Daten und die Grenze zu lesen impliziert werden, wenn Sie EXISTS verwenden, die einfacher in peewee ist:

SELECT EXISTS (SELECT * FROM MyTable WHERE id = ?); 
MyTable.select().where(MyTable.id == x).exists() 
Verwandte Themen