Announcement

Collapse
No announcement yet.

Delete mit zwei Bedingungen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delete mit zwei Bedingungen

    Hallo Community,

    ich habe ein kleines bzw. großes Performance-Problem in meiner Delete-Anweisung.
    Zunächst kurz der Hintergrund: ich habe eine Tabelle aus der ich Daten löschen will, aber nur dann wenn sowohl die ID gleich ist als auch die "Version" - eine ID kann in zwei oder mehreren Versionen vorliegen.
    Was ich gemacht habe ist folgendes:

    Code:
    delete from table1 a where a.id1 IN (Select b.id1 from table2 b where a.id2= b.id2
    Leider ist das ganze nicht sonderlich effektiv und läuft schon Ewigkeiten. Vielleicht kann mir jemand mit diesem Problem weiterhelfen!

    VG
    Christopher

  • #2
    zuerst würde ich die Bedingung drehen:
    [highlight="sql"]
    delete from table1 a where a.id1 IN (Select b.id1 from table2 b where b.id2= a.id2)
    [/highlight]
    Gibt es passende Indizes?

    Comment


    • #3
      OK, das mit den verdrehten Bedingungen kann ich mal ausprobieren, wobei mir im ersten Moment nicht so ganz klar ist was das bringt.

      Es ist ein Index auf der Kombination von (id1, id2) definiert, aber kein einzelner auf id2 bzw. id1

      Comment


      • #4
        Dann kann er auch keinen Index verwenden.

        Comment


        • #5
          Originally posted by Markus Kinzler View Post
          Dann kann er auch keinen Index verwenden.
          -- Hmmm, zumindest unter Oracle würde er bei einem zusammengesetzten Index (id1,id2) auch den Index benutzen, wenn nur id1 gefragt wäre


          Gruss

          Comment


          • #6
            Lass dir doch einfach mal den geschätzen Ausführensplan anzeigen.
            Solange die ersten Spalten eines Index verwendet werden besteht gute Hoffnung das auch ein großer Vorteil aus dem Index gezogen werden kann (Clustered Index Seek gegenüber Index Scan)

            Comment


            • #7
              Hallo!

              Nur so zum testen:

              DELETE FROM table1 a WHERE exists (select b.id1 from table2 b where b.id1 = a.id1 and b.id2=a.id2)

              So sollte zumindest der Index verwendet werden...

              BYE BERND

              Comment

              Working...
              X