diff --git a/reviewboard/diffviewer/managers.py b/reviewboard/diffviewer/managers.py
index 80d389c5692cba591c5fd261cd9eca6b5f6af170..f9770f30635a1d70e879ba278c8c9c319b391096 100644
--- a/reviewboard/diffviewer/managers.py
+++ b/reviewboard/diffviewer/managers.py
@@ -500,6 +500,7 @@ class DiffSetManager(models.Manager):
             diffset.save()
 
         encoding_list = repository.get_encoding_list()
+        filediffs = []
 
         for f in files:
             parent_file = None
@@ -538,8 +539,6 @@ class DiffSetManager(models.Manager):
                 dest_file=parser.normalize_diff_filename(dest_file),
                 source_revision=smart_unicode(orig_rev),
                 dest_detail=f.newInfo,
-                diff=f.data,
-                parent_diff=parent_content,
                 binary=f.binary,
                 status=status)
 
@@ -549,11 +548,19 @@ class DiffSetManager(models.Manager):
                 parent_file.delete_count == 0):
                 filediff.extra_data = {'parent_moved': True}
 
-            filediff.set_line_counts(raw_insert_count=f.insert_count,
-                                     raw_delete_count=f.delete_count)
-
             if save:
-                filediff.save()
+                # This state all requires making modifications to the database.
+                # We only want to do this if we're saving.
+                filediff.diff = f.data
+                filediff.parent_diff = parent_content
+
+                filediff.set_line_counts(raw_insert_count=f.insert_count,
+                                         raw_delete_count=f.delete_count)
+
+                filediffs.append(filediff)
+
+        if filediffs:
+            FileDiff.objects.bulk_create(filediffs)
 
         return diffset
 
diff --git a/reviewboard/diffviewer/tests/test_diffset_manager.py b/reviewboard/diffviewer/tests/test_diffset_manager.py
index deabd79664718b67bef99c7c5c4612bbb6e2107b..d39699a53d9854ca4749351e71e983ae15476f68 100644
--- a/reviewboard/diffviewer/tests/test_diffset_manager.py
+++ b/reviewboard/diffviewer/tests/test_diffset_manager.py
@@ -2,7 +2,7 @@ from __future__ import unicode_literals
 
 from kgb import SpyAgency
 
-from reviewboard.diffviewer.models import DiffSet
+from reviewboard.diffviewer.models import DiffSet, FileDiff
 from reviewboard.testing import TestCase
 
 
@@ -11,8 +11,8 @@ class DiffSetManagerTests(SpyAgency, TestCase):
 
     fixtures = ['test_scmtools']
 
-    def test_creating_with_diff_data(self):
-        """Test creating a DiffSet from diff file data"""
+    def test_create_from_data(self):
+        """Testing DiffSetManager.create_from_data"""
         repository = self.create_repository(tool_name='Test')
 
         self.spy_on(repository.get_file_exists,
@@ -24,9 +24,9 @@ class DiffSetManagerTests(SpyAgency, TestCase):
 
         self.assertEqual(diffset.files.count(), 1)
 
-    def test_creating_with_diff_data_with_basedir_no_slash(self):
-        """Test creating a DiffSet from diff file data with basedir without
-        leading slash
+    def test_create_from_data_with_basedir_no_slash(self):
+        """Testing DiffSetManager.create_from_data with basedir without leading
+        slash
         """
         repository = self.create_repository(tool_name='Test')
 
@@ -43,9 +43,9 @@ class DiffSetManagerTests(SpyAgency, TestCase):
         self.assertEqual(filediff.source_file, 'trunk/README')
         self.assertEqual(filediff.dest_file, 'trunk/README')
 
-    def test_creating_with_diff_data_with_basedir_slash(self):
-        """Test creating a DiffSet from diff file data with basedir with
-        leading slash
+    def test_create_from_data_with_basedir_slash(self):
+        """Testing DiffSetManager.create_from_data with basedir with leading
+        slash
         """
         repository = self.create_repository(tool_name='Test')
 
@@ -61,3 +61,19 @@ class DiffSetManagerTests(SpyAgency, TestCase):
         filediff = diffset.files.all()[0]
         self.assertEqual(filediff.source_file, 'trunk/README')
         self.assertEqual(filediff.dest_file, 'trunk/README')
+
+    def test_create_from_data_with_save_false(self):
+        """Testing DiffSetManager.create_from_data with save=False"""
+        repository = self.create_repository(tool_name='Test')
+
+        self.spy_on(repository.get_file_exists,
+                    call_fake=lambda *args, **kwargs: True)
+
+        with self.assertNumQueries(0):
+            DiffSet.objects.create_from_data(
+                repository, 'diff', self.DEFAULT_GIT_FILEDIFF_DATA, None,
+                None, None, '/', None,
+                save=False)
+
+        self.assertEqual(DiffSet.objects.count(), 0)
+        self.assertEqual(FileDiff.objects.count(), 0)
