Mysql
 sql >> Database >  >> RDS >> Mysql

Esclusione di record in cui la sottoquery restituisce risultati che devono escludersi a vicenda

Ed era brutto. Funziona bene fino a quando non c'è un altro carico significativo sul DB, quindi tutto procede molto lentamente. Ciò è dovuto principalmente alle limitazioni IO del server, ma l'approccio più semplice consisteva nell'ottenere isfiction e isNonFiction nelle tabelle MEMORY e l'istruzione DELETE può quindi assomigliare a:

    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

Nei test, questo sta riducendo l'intero processo da circa 90 secondi a 10 secondi.