Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Excluindo registros em que a subconsulta retorna resultados que precisam ser mutuamente exclusivos


E foi feio. Funciona bem até que haja qualquer outra carga significativa no banco de dados e, em seguida, tudo ocorre muito lentamente. Isso se deve principalmente às limitações de IO do servidor, mas a abordagem mais simples era obter isfiction e isNonFiction nas tabelas MEMORY e a instrução DELETE pode se parecer com:
    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

Nos testes, isso reduz todo o processo de cerca de 90 segundos para 10 segundos.