Datomic Pro and Datomic Cloud are now FREE!

Query Stats

25 January 2023

Today’s release of Datomic On-Prem, and coming soon in Cloud, includes a new feature: query-stats.

query-stats is a new feature that gives users visibility into the decisions made by the query engine while it processed your query. Datomic users can leverage the information returned by query-stats to find the optimal clause ordering for a query as well as gain visibility into various query components including query clauses, query rules, and query expressions.

For example, given the following query:

{:find  [(count ?artist-name)]
 :where [[?release :release/name ?release-name]
         [?release :release/artists ?artist]
         [?artist :artist/name ?artist-name]]}

The following query-stats are returned:

{:ret         [[4587]],
 :query-stats {:query  {:find  [(count ?artist-name)],
                        :where [[?release :release/name ?release-name]
                                [?release :release/artists ?artist]
                                [?artist :artist/name ?artist-name]]},
               :phases [{:sched   (([?release :release/name ?release-name]
                                    [?release :release/artists ?artist]
                                    [?artist :artist/name ?artist-name])),
                         :clauses [{:clause [?release :release/name ?release-name], :rows-in 0, :rows-out 11434, :binds-in (), :binds-out [?release], :expansion 11434, :warnings {:unbound-vars #{?release ?release-name}}}
                                   {:clause [?release :release/artists ?artist], :rows-in 11434, :rows-out 4600, :binds-in [?release], :binds-out [?artist]}
                                   {:clause [?artist :artist/name ?artist-name], :rows-in 4600, :rows-out 4587, :binds-in [?artist], :binds-out [?artist-name]}]}]}}

This output can be more easily interpreted using REBL:

40473ee8 8ba1 480f 92ed 28af07fe858f

To learn more about query-stats and other enhancements:

Read the release announcement for Datomic On-Prem.

Read the API documentation for Datomic On-Prem.