Và nó thật xấu xí. Nó hoạt động tốt cho đến khi có bất kỳ tải trọng đáng kể nào khác trên DB, và sau đó tất cả diễn ra rất chậm. Điều này chủ yếu là do các giới hạn IO của máy chủ, nhưng cách tiếp cận đơn giản hơn là đưa isfiction và isNonFiction vào các bảng MEMORY và sau đó câu lệnh DELETE có thể trông giống như sau:
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
Trong thử nghiệm, điều này đang đưa toàn bộ quá trình giảm từ khoảng 90 giây xuống 10 giây.