Index: django/db/models/fields/related.py
===================================================================
--- django/db/models/fields/related.py	(revision 10455)
+++ django/db/models/fields/related.py	(working copy)
@@ -475,8 +475,12 @@
             raise AttributeError, "Manager must be accessed via instance"
 
         manager = self.__get__(instance)
-        manager.clear()
-        manager.add(*value)
+        # another implementation to set m2m, try to affect minimal rows.
+        old_objects, target_objects = set(manager.all()), set(value)
+        add_objects = target_objects - old_objects
+        remove_objects =  old_objects - target_objects
+        manager.remove(*remove_objects)
+        manager.add(*add_objects)
 
 class ForeignKey(RelatedField, Field):
     empty_strings_allowed = False
