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

Ekskluderer poster, hvor underforespørgsel returnerer resultater, der skal udelukke hinanden

Og det var grimt. Det fungerer fint, indtil der er en anden væsentlig belastning på DB'en, og så går det hele meget langsomt. Dette skyldes for det meste serverens IO-begrænsninger, men den enklere tilgang var at få isfiction og isNonFiction ind i MEMORY-tabellerne, og DELETE-sætningen kan så se ud:

    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

I test er dette at få hele processen ned fra omkring 90 sekunder til 10 sekunder.




  1. verify_queryable_inventory returneret ORA-20008:Timeout

  2. Øjeblikkelig filinitialisering:Virkning under opsætning

  3. Forespørgsel:tæl flere aggregater pr. vare

  4. Returner 0, hvis feltet er null i MySQL