Wie lösche ich aus einer Tabelle, in der sich die ID in einer Liste von IDs befindet?


88

Wenn ich eine Liste mit IDs (1,4,6,7) und eine DB-Tabelle habe, in der ich alle Datensätze löschen möchte, in denen sich die ID in dieser Liste befindet, wie geht das?

Antworten:


166

Ihre Frage buchstabiert fast die SQL dafür:

DELETE FROM table WHERE id IN (1, 4, 6, 7)

@ jayarjo: Jeder Unterschied wäre wahrscheinlich vernachlässigbar und ich glaube nicht, dass es einen Grund gibt, warum das Löschen nacheinander sowieso effizienter wäre.
Matti Virkkunen

Hier kann Leistung die Bequemlichkeit beeinträchtigen. Zum Beispiel habe ich bereits Funktionen, um dies einzeln zu tun. Aber wenn es eine Chance auf Leistungssteigerung gäbe, könnte ich zusätzlichen Code schreiben, sonst lohnt es sich wahrscheinlich nicht.
Jayarjo

8
Einer nach dem anderen wäre mit ziemlicher Sicherheit langsamer, sicherlich unter Oracle oder PostgreSQL. Das Aufteilen von SQL-Operationen in viele kleinere Operationen ist eine gute Möglichkeit, eine schlechte Leistung zu erzielen.
David Aldridge

1
Ich fand heraus, dass 10.000 Elemente in der In-Klausel ungefähr 200 Sekunden dauerten, 1000 jedoch 3 Sekunden (oder 30 Sekunden im normalisierten Vergleich). Größe ist wichtig.
Ohmusama


-7

Die richtige Antwort lautet, dass die Geschwindigkeit von den Merkmalen der jeweiligen Implementierung / Engine abhängt, die Sie verwenden, und dass Sie sich vor Quacksalbern hüten sollten, die vorgeben, eine eindeutige Antwort auf diese Frage geben zu können.

Wenn der Optimierer Ihres Systems so schlecht ist, dass er die Optimierungsmöglichkeit von 'WHERE id IN (...)' nicht erkennt, führt er einen Tabellenscan durch, der viel langsamer sein kann als das Ausgeben von 4 separaten Löschbefehlen.


1
Müll. Bitte zitieren Sie eine Datenbank-Engine, bei der 4 separate Löschvorgänge schneller wären.
Blorgbeard ist am

3
Wenn der Optimierer in Ihrem System so schlecht ist ... sollten Sie zu einem anderen Datenbankmodul wechseln
Matti Virkkunen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.