sql >> Database >  >> RDS >> Mysql

Records uitsluiten waar subquery resultaten retourneert die elkaar moeten uitsluiten

En het was lelijk. Het werkt prima totdat er een andere significante belasting op de DB is, en dan gaat het allemaal erg langzaam. Dit komt meestal door IO-beperkingen van de server, maar de eenvoudigere aanpak was om isfiction en isNonFiction in de MEMORY-tabellen te krijgen en de DELETE-instructie kan er dan als volgt uitzien:

    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

Bij het testen wordt hierdoor het hele proces teruggebracht van ongeveer 90 seconden naar 10 seconden.




  1. Dynamische SQL-query's maken naar een MySQL DB

  2. Hoe GREATEST() werkt in MariaDB

  3. Mysqli-query met een SET-variabele-instructie (dwz meerdere query's)

  4. hoe kan ik een tagging-systeem maken met behulp van php en mysql?