Query Insights needs a Starter license. Everything it shows is computed on your Mac from the query history already stored there. Nothing is uploaded.

Query Insights: summary, activity chart, and the ranked panels below it
Queries Are Grouped by Shape
SELECT * FROM users WHERE id = 1 and SELECT * FROM users WHERE id = 2 are the same query run twice, not two queries run once. Insights strips the values out of every statement and groups by what is left:
This is the same idea as PostgreSQL’s
pg_stat_statements and MySQL’s statement digest, so the numbers mean what they mean there.
Two things are deliberately not merged. Table and column names keep their capitalization, because on a case-sensitive server Orders and orders are different tables and merging them would report a wrong count. And numbers inside a name stay part of the name, so events_2025 and events_2026 are counted separately.
Each row shows the shape, not the literal query you ran. Copy Query and Load in Editor in the right-click menu give you the most recent real query in the group, values and all.
The Panels
Summary across the top: how many queries ran, what share failed, the average duration, and the total time spent waiting. Activity charts queries per day, split into succeeded and failed. Ranges of two days or less are charted by hour instead. Most Run ranks shapes by how many times they ran. Slowest ranks by Total Time by default, which is whatpg_stat_statements sorts by: it finds the query that actually costs you time, which is usually a quick query you run constantly rather than one slow query you ran once. Switch it to Average Time to find the query that is slow every single time. Average Time only lists shapes that ran at least 3 times, because the average of one run is just that run.
Got Slower compares the range you picked against the range immediately before it. Pick Last 7 Days and it compares against the 7 days before that. A shape is reported when all of these hold:
- it ran at least 5 times in both periods
- its average got at least 50% slower
- its average grew by at least 25 ms
Filtering
Source defaults to My Queries, the SQL you wrote yourself. Turn on Table Browsing to see what the app sent while you clicked around, which is usually where the highest run counts hide. The sources are the same ones the history drawer uses.
Date defaults to Last 4 Weeks rather than All Time, because “got slower than before” needs a before to compare against.
There is no outcome filter, on purpose. Hiding failed queries would make the failure panel report that nothing ever fails.
Insights refreshes itself as you run queries. The refresh button is there for when you want it now.

