Si vous avez une grande table, la manière la plus efficace est de recréer cette table:
create table items_temp like items;
INSERT into items_temp (id, category_id, ... )
SELECT id, category_id, ... from items orig
WHERE id in (
SELECT id from items items_select
WHERE orig.category_id = items_select.category_id
ORDER by category_id LIMIT 20
);
RENAME table items to items_old, items_temp to items;
MODIFICATION: TRUNCATE table items_old
Ne supprimez pas - c'est ce que nous essayons d'éviter - les suppressions supprimeront effectivement chaque ligne et respecteront les contraintes étrangères, c'est ce qui prendra beaucoup de CPU et d'E/S, le troncage ne le fait pas.
Sinon, vous risquez fort de faire tomber votre base de données pendant la phase de suppression. Si c'est une petite quantité de données, ce n'est pas grave.