diff --git a/resources/migrations/037_add_query_hash_and_indexes.yaml b/resources/migrations/037_add_query_hash_and_indexes.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..22bd1799130f9a32a3c3854d34ce072fec401645
--- /dev/null
+++ b/resources/migrations/037_add_query_hash_and_indexes.yaml
@@ -0,0 +1,30 @@
+databaseChangeLog:
+  - changeSet:
+      id: 37
+      author: tlrobinson
+      changes:
+        - addColumn:
+            tableName: query_queryexecution
+            columns:
+              - column:
+                  name: query_hash
+                  type: int
+                  constraints:
+                    nullable: true
+        - addNotNullConstraint:
+            tableName: query_queryexecution
+            columnName: query_hash
+            columnDataType: int
+            defaultNullValue: 0
+        - createIndex:
+            tableName: query_queryexecution
+            indexName: idx_query_queryexecution_query_hash
+            columns:
+              column:
+                name: query_hash
+        - createIndex:
+            tableName: query_queryexecution
+            indexName: idx_query_queryexecution_started_at
+            columns:
+              column:
+                name: started_at
diff --git a/resources/migrations/liquibase.json b/resources/migrations/liquibase.json
index 2ed788d166dacfcefb7a2a2a9861001a7d9c709e..c737773a3ddd37f606bebb8e0a0473e212c8d5d9 100644
--- a/resources/migrations/liquibase.json
+++ b/resources/migrations/liquibase.json
@@ -34,6 +34,7 @@
       {"include": {"file": "migrations/033_add_physical_schema_tables.yaml"}},
       {"include": {"file": "migrations/034_add_pulse_channel_enabled_field.yaml"}},
       {"include": {"file": "migrations/035_modify_setting_value_length.yaml"}},
-      {"include": {"file": "migrations/036_add_dashboard_filters_columns.yaml"}}
+      {"include": {"file": "migrations/036_add_dashboard_filters_columns.yaml"}},
+      {"include": {"file": "migrations/037_add_query_hash_and_indexes.yaml"}}
   ]
 }
diff --git a/src/metabase/api/dataset.clj b/src/metabase/api/dataset.clj
index 13a6ba9113a34517530749fe0025b998269b6c4d..9bd074ddb43a1132623efbfa6621722eac1a04ac 100644
--- a/src/metabase/api/dataset.clj
+++ b/src/metabase/api/dataset.clj
@@ -40,7 +40,7 @@
    ;; add sensible constraints for results limits on our query
    (let [query         (assoc body :constraints dataset-query-api-constraints)
          running-times (db/select-field :running_time QueryExecution
-                         :json_query (json/generate-string query)
+                         :query_hash (hash query)
                          {:order-by [[:started_at :desc]]
                           :limit    10})]
      {:average (float (/ (reduce + running-times)
diff --git a/src/metabase/query_processor.clj b/src/metabase/query_processor.clj
index 8758fe4abbc5dec1f7ae9cbbecd8e321c24993a1..b0ceccc339cec6b3b5ab8abaee5abc447eb71e47 100644
--- a/src/metabase/query_processor.clj
+++ b/src/metabase/query_processor.clj
@@ -570,9 +570,11 @@
   [query {:keys [executed_by]}]
   {:pre [(integer? executed_by)]}
   (let [query-uuid      (.toString (java.util.UUID/randomUUID))
+        query-hash      (hash query)
         query-execution {:uuid              query-uuid
                          :executor_id       executed_by
                          :json_query        query
+                         :query_hash        query-hash
                          :query_id          nil
                          :version           0
                          :status            :starting
@@ -588,7 +590,7 @@
                          :start_time_millis (System/currentTimeMillis)}
         query           (assoc query :info {:executed-by executed_by
                                             :uuid        query-uuid
-                                            :query-hash  (hash query)
+                                            :query-hash  query-hash
                                             :query-type  (if (mbql-query? query) "MBQL" "native")})]
     (try
       (let [result (process-query query)]