2012-05-09 11 views
0

私はテーブルリストを持っています。このようなconstaintsと依存のテーブルがあります。たとえば従属テーブルの行が多い行を削除する

CONSTRAINT `FK_list_id` FOREIGN KEY (`list_id`) 
    REFERENCES `lists` (`list_id`) 
    ON DELETE CASCADE ON UPDATE CASCADE. 

、いくつかは、それを削除するには長い時間がかかります(数千人の100以上)の子テーブルに多くの行をLIST_IDために私が持っている場合。また、これらの操作によってサーバーを絞ることができます。

この場合、リストを削除するにはどうすればよいですか? ON DELETE CASCADEを使用しないでください。代わりに、リストを削除して、バックグラウンドで、子行をカスケード削除してリストを削除するのではなく、サブスクライバを削除しますか?

答えて

0

代わりにON DELETE SET NULLを使用し、後でFK idがNULLであるレコードを検索して削除することができます。

+0

なぜでしょうか? 'SET NULL'は依然として書き込み操作であり、関連するすべてのレコードに適用されますが、いいえ? – dnagirl

+0

SET NULLの利点はあまり明確ではありません。たぶん、NO ACTIONを使用して、キューの項目を入れて、いくつかのlist_idを持つ行を、バックグラウンドで1000のようなチャンクで削除します。 – Oleg

関連する問題