diff --git a/frontend/src/metabase-types/api/table.ts b/frontend/src/metabase-types/api/table.ts
index 61ffdbcded48ae902c461864db05325f51dd5814..9e0857b6bea0393fa6b0e0e522a895a2ef4c7e51 100644
--- a/frontend/src/metabase-types/api/table.ts
+++ b/frontend/src/metabase-types/api/table.ts
@@ -71,6 +71,7 @@ export interface TableListQuery {
   include_hidden?: boolean;
   include_editable_data_model?: boolean;
   remove_inactive?: boolean;
+  skip_fields?: boolean;
 }
 
 export interface ForeignKey {
diff --git a/frontend/src/metabase/admin/permissions/pages/DataPermissionsPage/DataPermissionsPage.tsx b/frontend/src/metabase/admin/permissions/pages/DataPermissionsPage/DataPermissionsPage.tsx
index b4eccee2372b7ac49c66267b1726b4b7ef2dd0d8..30b241a1fc783f59fb256a3079ecf93ef11a1eaf 100644
--- a/frontend/src/metabase/admin/permissions/pages/DataPermissionsPage/DataPermissionsPage.tsx
+++ b/frontend/src/metabase/admin/permissions/pages/DataPermissionsPage/DataPermissionsPage.tsx
@@ -73,6 +73,7 @@ function DataPermissionsPage({
       dbId: params.databaseId,
       include_hidden: true,
       remove_inactive: true,
+      skip_fields: true,
     },
     enabled: params.databaseId !== undefined,
   });
diff --git a/src/metabase/api/database.clj b/src/metabase/api/database.clj
index 4399622aa6d27d3e4e719c5a067127183b90a966..8059c9e26b7cc167fffba6c219d7fdce866c30b0 100644
--- a/src/metabase/api/database.clj
+++ b/src/metabase/api/database.clj
@@ -453,15 +453,14 @@
   []
   (saved-cards-virtual-db-metadata :question :include-tables? true, :include-fields? true))
 
-(defn- db-metadata [id include-hidden? include-editable-data-model? remove_inactive?]
+(defn- db-metadata [id include-hidden? include-editable-data-model? remove_inactive? skip-fields?]
   (let [db (-> (if include-editable-data-model?
                  (api/check-404 (t2/select-one Database :id id))
                  (api/read-check Database id))
-               (t2/hydrate [:tables [:fields
-                                     :has_field_values
-                                     [:target :has_field_values]]
-                            :segments
-                            :metrics]))
+               (t2/hydrate
+                (if skip-fields?
+                  [:tables :segments :metrics]
+                  [:tables [:fields :has_field_values [:target :has_field_values]] :segments :metrics])))
         db (if include-editable-data-model?
              ;; We need to check data model perms after hydrating tables, since this will also filter out tables for
              ;; which the *current-user* does not have data model perms
@@ -498,15 +497,17 @@
   permissions, if Enterprise Edition code is available and a token with the advanced-permissions feature is present.
   In addition, if the user has no data access for the DB (aka block permissions), it will return only the DB name, ID
   and tables, with no additional metadata."
-  [id include_hidden include_editable_data_model remove_inactive]
+  [id include_hidden include_editable_data_model remove_inactive skip_fields]
   {id                          ms/PositiveInt
    include_hidden              [:maybe ms/BooleanValue]
    include_editable_data_model [:maybe ms/BooleanValue]
-   remove_inactive             [:maybe ms/BooleanValue]}
+   remove_inactive             [:maybe ms/BooleanValue]
+   skip_fields                 [:maybe ms/BooleanValue]}
   (db-metadata id
                include_hidden
                include_editable_data_model
-               remove_inactive))
+               remove_inactive
+               skip_fields))
 
 
 ;;; --------------------------------- GET /api/database/:id/autocomplete_suggestions ---------------------------------
diff --git a/test/metabase/api/database_test.clj b/test/metabase/api/database_test.clj
index 3c490cf62058ae7d3eb9724833b74e8a9added01..6a942e5acdfdc5217c6729ae17978c287ee4b433 100644
--- a/test/metabase/api/database_test.clj
+++ b/test/metabase/api/database_test.clj
@@ -688,9 +688,20 @@
   (mt/with-temp [Database {db-id :id} {}
                  Table    _ {:db_id db-id, :active false}]
     (testing "GET /api/database/:id/metadata?include_hidden=true"
-        (let [tables (->> (mt/user-http-request :rasta :get 200 (format "database/%d/metadata?remove_inactive=true" db-id))
-                          :tables)]
-          (is (= () tables))))))
+      (let [tables (->> (mt/user-http-request :rasta :get 200 (format "database/%d/metadata?remove_inactive=true" db-id))
+                        :tables)]
+        (is (= () tables))))))
+
+(deftest fetch-database-metadata-skip-fields-test
+  (mt/with-temp [Database {db-id :id} {}
+                 Table    table       {:db_id db-id}
+                 Field    _           {:table_id (u/the-id table)}]
+    (testing "GET /api/database/:id/metadata?skip_fields=true"
+      (let [fields (->> (mt/user-http-request :rasta :get 200 (format "database/%d/metadata?skip_fields=true" db-id))
+                      :tables
+                      first
+                      :fields)]
+        (is (= () fields))))))
 
 (deftest autocomplete-suggestions-test
   (let [prefix-fn (fn [db-id prefix]