sql >> Databasteknik >  >> RDS >> Mysql

Exkluderar poster där underfrågan returnerar resultat som måste utesluta varandra

Och det var fult. Det fungerar bra tills det finns någon annan betydande belastning på DB, och sedan går allt väldigt långsamt. Detta beror mest på serverns IO-begränsningar, men det enklare tillvägagångssättet var att få in isfiction och isNonFiction i MEMORY-tabellerna och DELETE-satsen kan sedan se ut så här:

    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

Vid testning är detta att få ner hela processen från cirka 90 sekunder till 10 sekunder.




  1. Vilken är den idealiska datatypen att använda när du lagrar latitud/longitud i en MySQL-databas?

  2. Rätt sätt att fråga om mysql_num_rows i PHP

  3. MYSQL TIMEDIFF-funktionen fungerar inte under lång tid

  4. SQL Server *=Operatör?