そしてそれは醜いものでした。 DBに他の重要な負荷がかかるまでは正常に機能し、その後はすべて非常に遅くなります。これは主にサーバーのIO制限によるものですが、より簡単なアプローチはisfictionとisNonFictionをMEMORYテーブルに取り込むことであり、DELETEステートメントは次のようになります。
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
テストでは、これによりプロセス全体が約90秒から10秒に短縮されます。