Wenn Sie dies regelmäßig tun müssen, sollten Sie zunächst versuchen, das Datenbankdesign zu verbessern (indem Sie nach Primärschlüsseln suchen und versuchen, die "Join" -Bedingung zu erhalten) Spalten wie möglich). Wenn das nicht möglich ist, besteht die eindeutige zweite Option darin, die "Selektivität" jeder der Spalten herauszufinden (dh wie viele "unterschiedliche" Werte jede Spalte hat, "Name" wäre selektiver als "Adresse") Land "als" männlich/weiblich "). Die allgemeine Art der Aussage würde ich vorschlagen, würde so aussehen:
Delete from tableA
where exists (select * from tableB
where tableA.colx1 = tableB.colx1
and tableA.colx2 = tableB.colx2
etc. and tableA.colx10 = tableB.colx10).
Die Idee ist, die Spalten in der Reihenfolge der Selektivität aufzulisten und einen Index für colx1, colx2 usw. auf tableB zu bauen. Die genaue Anzahl der Spalten in Tabelle B wäre ein Ergebnis eines Versuchs &. (Versetzen Sie die Zeit zum Erstellen des Index für Tabelle B mit der verbesserten Zeit der Löschanweisung.)
Wenn dies nur eine einmalige Operation ist, wähle ich nur eine der oben beschriebenen langsamen Methoden. Es ist wahrscheinlich nicht die Mühe wert, zu viel darüber nachzudenken, wenn Sie einfach eine Aussage vor der Heimreise starten können ...
mit einem Join im Löschen wird wahrscheinlich schneller sein – HLGEM
Meine Lösung ist eine Entwicklerlösung. Keine fancypants DBA Lösung. :-D Aber ich lerne gerne mehr sql. –
keine ID-Spalte in beiden Tabellen ... – Thorsten