Docs
Docs /SQL Editor /Insights panel
SQL EditorCost

Insights panel

A side panel that tells you where a query's bytes go before you run it, and where its time went after. Cost is broken down per CTE, pipe stage, subquery, and statement, from BigQuery dry runs, so you optimize the section that matters instead of guessing.

Prism Insights → Costs Debug
PRISM INSIGHTS×
Costs Debug
Analyze
ModeSectionColumn
Filter Propagation
Cost Breakdown
Generated: 2026-02-14 15:10:37
Total Query Estimate
Total Cost: $0.00
Total Bytes: 679.6 MB
CTEs (2)
failed_testsCost: $0.02>100% of total
Bytes: 3.64 GB
dangerous_defectsCost: $0.0066% of total
Bytes: 451.39 MB
Statements (1)
Main QueryCost: $0.00100% of total
Bytes: 679.6 MB
The whole query scans 679.6 MB. failed_tests on its own would scan 3.64 GB; the note below explains why a part can cost more than the whole.

Opening it

Any of these opens the panel on the right of the editor:

  • The ⋮ menu in the header → Prism Insights
  • Right-click in the editor → Show Prism Insights
  • F1 in the editor → Show Prism Insights

There is no keyboard shortcut: I belongs to the browser’s DevTools and a web page can’t take it.

The panel has four views. Wider than 400 px they are tabs; narrower, a dropdown.

ViewWhen it has contentWhat it shows
Costs DebugAfter you click AnalyzeBytes and cost per section of the query, from dry runs
Execution PlanAfter a query runsStages, row counts, detected performance issues; see Execution plan
Model HintAlwaysWhether on-demand or a reservation would be cheaper for this query; see Pricing comparison
LineageAs you typeWhich source columns feed each output column; see Column lineage

Breaking cost down by section

Click Analyze. Querylab.io splits the query at its execution boundaries (each CTE, each pipe |> stage, each subquery, each set-operation branch, each statement of a script) and dry-runs the query up to each boundary. Dry runs are free. The progress bar counts boundaries as they come back; Cancel stops it.

The result is grouped by kind: CTEs, Pipes, Subqueries, Set Operations, Statements. Each entry shows its bytes, its cost at the tab’s pricing, and its share of the total. The Total Query Estimate box at the top is the dry run of the whole query, the same number the editor’s status bar shows.

Hover an entry for the copy icon: it copies the exact SQL that was dry-run for that section, which is the fastest way to see what “up to this CTE” means.

Same gutter, different entry point: the diamond icons in the editor margin estimate or run a single section without opening the panel; see Partial execution.

Choosing section or column mode

The Mode switch chooses what the analysis breaks down by.

ModeDry runsUse it for
SectionOne per boundaryFinding the expensive CTE, pipe stage, or statement. The default.
ColumnOne per selected columnWide tables: which columns of a SELECT list are actually expensive to read

Column mode replaces the cost breakdown with a Column Cost Breakdown card that has three tabs: By Column (each column’s bytes, with Expensive marked at over 10% of the total and Partition / Cluster columns flagged), JOIN Impact (how each join changes row counts), and By Table. The header counts the dry runs it took.

If you haven’t chosen a mode yet, the panel picks one from the query’s shape and says so under the switch: Auto-selected based on query. The choice you make yourself is remembered.

Propagating filters upstream

Filter Propagation is on by default. When it’s on, a WHERE in a downstream section is applied to the upstream CTEs it filters when they are estimated, the same pushdown BigQuery does at run time. Off, every CTE is estimated as written, which is the number you want when you’re deciding whether a CTE needs its own filter.

Filters combined with OR, or containing a subquery, are not pushed down.