diff --git a/src/Utility/SourceDatabase.php b/src/Utility/SourceDatabase.php
index be9f2be..02711c2 100644
--- a/src/Utility/SourceDatabase.php
+++ b/src/Utility/SourceDatabase.php
@@ -85,6 +85,19 @@ class SourceDatabase {
       return [];
     }
 
+    static $cached;
+
+    // Cache to avoid repeating these queries unnecessarily.
+    $cid = implode(':', array_filter([
+      'linkit',
+      is_string($field_names) ? $field_names : implode(',', $field_names),
+      $source_entity_type_id,
+      $source_bundle,
+    ]));
+    if (isset($cached[$cid])) {
+      return $cached[$cid];
+    }
+
     // Create a (very big) union query.
     $query = NULL;
 
@@ -121,11 +134,12 @@ class SourceDatabase {
 
     try {
       // The query might return even 'NULL' format.
-      return array_filter($query->execute()->fetchCol());
+      $cached[$cid] = array_filter($query->execute()->fetchCol());
     }
     catch (DatabaseExceptionWrapper $e) {
+      $cached[$cid] = [];
     }
-    return [];
+    return $cached[$cid];
   }
 
   /**
