sql >> Databáze >  >> RDS >> Mysql

Vyloučení záznamů, kde poddotaz vrací výsledky, které se musí vzájemně vylučovat

A bylo to ošklivé. Funguje to dobře, dokud nedojde k nějaké další významné zátěži DB, a pak to jde všechno velmi pomalu. To je většinou způsobeno omezeními IO serveru, ale jednodušším přístupem bylo dostat isfiction a isNonFiction do tabulek MEMORY a příkaz DELETE pak může vypadat takto:

    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

Při testování se celý proces zkrátil z přibližně 90 sekund na 10 sekund.




  1. Zálohování databází SQL pomocí VDP Advanced SQL Agent

  2. Výjimka zlomené trubky na aplikaci Grails

  3. Spusťte PDO s polem obsahujícím hodnoty null

  4. Instalace PostgreSQL na Ubuntu pro Ruby on Rails