diff --git a/django/db/models/base.py b/django/db/models/base.py
index b01bb0e..2e6bea8 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -269,7 +269,8 @@ class ModelState(object):
         self.db = db
         # If true, uniqueness validation checks will consider this a new, as-yet-unsaved object.
         # Necessary for correct validation of new instances of objects with explicit (non-auto) PKs.
-        # This impacts validation only; it has no effect on the actual save.
+        # This impacts validation and it is also used as a hint when saving. See save_base for
+        # details. 
         self.adding = True
 
 class Model(object):
@@ -514,11 +515,24 @@ class Model(object):
 
         if not meta.proxy:
             non_pks = [f for f in meta.local_fields if not f.primary_key]
-
             pk_val = self._get_pk_val(meta)
             pk_set = pk_val is not None
             record_exists = False
             manager = cls._base_manager
+            # A small optimization: when we expect that the object does not exist in the 
+            # db we will not do the normal update - if nothing update - save dance.
+            # Instead we do the old way of select - insert or update. This is because
+            # when saving large models we need to transfer the data in the update which
+            # will do nothing and then again in the insert. The select is faster when
+            # insert is expected.
+            # However, if force_insert or force_update is set, we naturally do not
+            # override them.
+            if not force_insert and not force_update:
+                if pk_set and non_pks and (self._state.db <> using or self._state.adding):
+                    if manager.using(using).filter(pk=pk_val).exists():
+                        force_update = True
+                    else:
+                        force_insert = True
             if pk_set and not force_insert:
                 # Try to update the object. If something is updated, we know the record
                 # existed. If not, we know it did not exists.
