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.