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.