sql >> Base de Datos >  >> RDS >> Mysql

Exclusión de registros donde la subconsulta devuelve resultados que deben ser mutuamente excluyentes

Y fue feo. Funciona bien hasta que hay otra carga significativa en la base de datos, y luego todo va muy lentamente. Esto se debe principalmente a las limitaciones de E / S del servidor, pero el enfoque más simple era obtener isfiction y isNonFiction en las tablas de MEMORIA y la declaración DELETE puede verse así:

    DELETE tmp_table FROM tmp_table
         INNER JOIN
         (
            SELECT ASIN, MAX( isFiction ) AS isFiction, MAX( isNonFiction ) AS isNonFiction
            FROM tmp_table
            GROUP BY ASIN
            HAVING isFiction =1
            AND isNonFiction =1
         ) D
         WHERE D.ASIN=tmp_table.ASIN AND tmp_table.isNonFiction=1

En las pruebas, esto reduce todo el proceso de unos 90 segundos a 10 segundos.