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.