Si esto es algo que tendrá que hacer de forma regular, la primera opción debe ser intentar mejorar el diseño de la base de datos (buscando claves principales, tratando de que la condición de "unirse" esté activada). columnas como sea posible).
Si no es posible, la segunda opción distinta es determinar la "selectividad" de cada una de las columnas (es decir, cuántos valores "diferentes" tiene cada columna, 'nombre' sería más selectivo que 'dirección país 'que' hombre/mujer '). El tipo general de declaración yo sugeriría sería así:
Delete from tableA
where exists (select * from tableB
where tableA.colx1 = tableB.colx1
and tableA.colx2 = tableB.colx2
etc. and tableA.colx10 = tableB.colx10).
La idea es hacer una lista de las columnas en el orden de la selectividad y construir un índice en colx1, etc. colx2 en TableB. El número exacto de columnas en la tabla B sería el resultado de alguna medida de prueba &. (Compensar el tiempo para construir el índice en la tabla B con el tiempo mejorado de la instrucción delete.)
Si esta es solo una operación de una sola vez, elegiría uno de los métodos lentos descritos anteriormente. Probablemente no valga la pena el esfuerzo de pensar demasiado sobre esto cuando puede simplemente comenzar un enunciado antes de irse a casa ...
usando una combinación en la eliminación probablemente sea más rápido – HLGEM
Mi solución es una solución de desarrollador. No es una solución DBA de fancypants. :-D Pero me gusta aprender más sql. –
no hay columna de id en ninguna de las tablas ... – Thorsten