Markus**: SQL-Performance-Frage

Hallo Forum!

Ich stehe grade vor der Frage, was wohl performanter ist, wenn ich z.B. eine Reihe von Datensätzen aus einer Tabelle löschen möchte.

a) dem DBMS eine Reihe von "DELETE"-Anweisungen in Form von:
DELETE FROM x WHERE y = 1;
DELETE FROM x WHERE y = 3;
DELETE FROM x WHERE y = 4;
usw.

zum batch verarbeiten zu übergeben, oder

b) dem Datenbanksystem EINE Anweisung á la:
DELETE FROM x  WHERE y = 1 OR y = 3 OR y = 4...usw.

oder vielleicht:
c) DELETE FROM x WHERE y IN (1, 3, 4, ...usw.)

zur Verfügung zu stellen?!
Was ist "geschickter" oder wird das System sowas bemerken und es intern sowieso identisch behandeln?

Hat jemand ein bißchen Plan von den Datenbank-Interna?

Danke im Voraus und Gruß!

  1. Hallo,

    a) dem DBMS eine Reihe von "DELETE"-Anweisungen in Form von:
    DELETE FROM x WHERE y = 1;
    DELETE FROM x WHERE y = 3;
    DELETE FROM x WHERE y = 4;
    usw.

    zum batch verarbeiten zu übergeben, oder

    dürfte die schlechteste Performance bringen. Lässt sich nur mit Prepared Statements beschleunigen.

    b) dem Datenbanksystem EINE Anweisung á la:
    DELETE FROM x  WHERE y = 1 OR y = 3 OR y = 4...usw.

    oder vielleicht:
    c) DELETE FROM x WHERE y IN (1, 3, 4, ...usw.)

    Was ist "geschickter" oder wird das System sowas bemerken und es intern sowieso identisch behandeln?

    a) im Gegensatz zu b) und c): nein, das kann das System nicht bemerken.
    Befrage Dein DBMS, was es damit macht. Es gibt sowas wie Ausführungspläne, andere SQL-Dialekte kennen EXPLAIN ...

    Optimierung von SQL-Statements ist extrem DBMS-abhängig und kann zudem von den vorhandenen Daten und dem DB-Design abhängen.

    Freundliche Grüße

    Vinzenz

  2. moin,

    nicht immer ganz 100% zu beantworten. grundsätzlich ist eine anweisung immer besser ale viele anweisung. aber auch hier kann die ausnahme die regel bestätigen, daszwei anweisungen schneller sind als alles in eine zu packen. hinzu kommen neben der performance auch immer aspekte wie wartbarkeit und einfachheit hinzu.

    Was ist "geschickter" oder wird das System sowas bemerken und es intern sowieso identisch behandeln?

    bezüglich b) und c) sehe ich schon einen unterschied, weniger bezüglich des ausführungsplans, sondern vielmehr vom handling. beim OR operator wird leider immer wieder im zusammenhang mit anderen operatoren wie AND vergessen, die klammern zu setzen, sofern den welche nötig sind. Da hat man mit IN einen vorteil, weil diese fehlerquelle weg fällt.

    Ilja