Je ne pense pas qu'il soit possible de supprimer sans verrouillage. Cela dit, je ne pense pas que le verrouillage du dossier que vous voulez supprimer soit un problème. Ce qui poserait un problème est le verrouillage d'autres lignes.
J'ai trouvé quelques informations sur ce sujet ici: http://dev.mysql.com/doc/refman/5.0/en/innodb-locks-set.html
Ce que je suggère, est d'essayer de faire un million supprime seule ligne. Je pense que si vous faites tout cela en une seule transaction, la performance ne devrait pas trop nuire. de sorte que vous obtiendrez quelque chose comme:
START TRANSACTION;
DELETE FROM tab WHERE id = 1;
..
..
DELETE FROM tab WHERE id = x;
COMMIT;
Vous pouvez générer les statments nécessaires en faisant quelque chose comme
SELECT CONCAT('DELETE FROM tab WHERE id = ', id)
FROM tab
WHERE <some intricate condition that selects the set you want to delete>
donc l'avantage sur cette méthode au lieu de faire:
DELETE FROM tab
WHERE <some intricate condition that selects the set you want to delete>
est que dans la première approche, vous ne verrouillez que l'enregistrement que vous supprimez, alors que dans la seconde, vous risquez de bloquer d'autres enregistrements qui se trouvent dans la même plage que la ligne s vous supprimez.
Y a-t-il beaucoup d'index sur cette table? –
Indexez les colonnes qui géreront les conditions. Puis effectuez la suppression lorsque le trafic vers le site est faible (@ nuit probablement). –
voir aussi http://stackoverflow.com/questions/23193761/delete-operation-locks-whole-table-in-innodb qui mentionne le verrouillage de l'espace – rogerdpack