Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

To make a slow dbt model faster, first identify whether the delay comes from project parsing, warehouse query execution, repeatedly transforming historical data, or running more models than the task requires. Then address that bottleneck: choose a suitable materialization, make incremental logic correct, tune the relevant warehouse adapter, or narrow the DAG selection. Incremental models can reduce repeated work, but they add correctness and maintenance obligations, so they are not a default fix.

Why is my dbt model slow?

“Slow” can describe several different waits, and each points to a different remedy. A warehouse query that runs slowly is not solved by reducing project parsing time; likewise, an efficient query may still be part of an unnecessarily broad run.

  • Project parsing or compilation: dbt takes a long time before warehouse model execution begins.
  • Warehouse execution: a model’s SQL query takes a long time to run.
  • Repeated historical work: each run transforms far more source data than the new or changed data requires.
  • Excess DAG work: the command selects models outside the task’s necessary scope.

These categories require different interventions. The dbt guidance cited below covers materializations, incremental processing, model selection, and specific BigQuery options; it does not establish one universal profiling procedure or query-plan checklist for every warehouse and adapter.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Choose a materialization for the workload

Materialization affects both how long dbt takes to build a model and how downstream users experience it. Consider build time, query speed, freshness, reuse by downstream models, and the operational effort needed to keep results correct.

Materialization Build and query behavior When it can fit Trade-off
View Generally faster to build than a table, but slower to query, according to dbt’s workflow guidance. When quick builds matter and downstream query performance is acceptable. Downstream queries may repeatedly pay for the underlying transformations.
Table Stores a built result for downstream queries; generally slower to build than a view. For BI-facing models or slow transformations reused by many downstream models. A full table build may repeatedly process historical data.
Incremental Stores a table and, after the initial build, can process selected rows rather than rebuilding all source rows. When full table builds exceed an acceptable runtime or compute threshold. Requires correct filtering and update handling, plus ongoing maintenance.

dbt Labs puts the recommendation plainly in its materialization guidance: “Use incremental models when your dbt runs are becoming too slow (i.e. don’t start with incremental models).” The dbt BigQuery quickstart likewise recommends starting with views and moving to tables when downstream queries become slow. Treat those as workload guidance, not a rule that one materialization always wins.

When should I use an incremental model in dbt?

Use an incremental model when rebuilding the entire result has become too expensive or slow and the model can reliably identify which source rows need processing. On its first run, dbt transforms all source rows; later runs can use the model’s incremental filter to select rows and insert or update them in the existing target. dbt says this can reduce runtime and warehouse compute. See Configure incremental models.

Make the model valid on its first and later runs

The SQL must work whether is_incremental() evaluates to true or false. A common approach filters source records using a timestamp compared with the latest timestamp already in {{ this }}. On the initial build, there is no existing incremental target to use, so the non-incremental path must still produce a valid full result.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A strictly newer-timestamp filter can miss records that arrive late or updates to older records. If the model must replace existing records when source data changes, define a genuinely unique key and use an appropriate update strategy. Check for duplicate keys in both the existing target and the new incremental rows; depending on the adapter and strategy, duplicates can cause a run to fail.

Place filters and advanced predicates deliberately

For models with complex CTEs, consider where the incremental filter is applied. Filtering earlier may reduce work on some warehouses, but the effect depends on the adapter and query. dbt’s incremental_predicates can limit scans of the existing table, but they are advanced controls intended for data volumes large enough to justify the extra effort. Check how null values in the relevant columns affect the predicate.

Plan for logic and schema changes

Incremental targets can contain rows produced by older model logic. When a logic change requires recomputing history, dbt documents --full-refresh as a way to rebuild from scratch. Schema-change options can address changed columns, but they do not backfill existing rows for a newly added column. On BigQuery, changing column types with sync_all_columns can require a full table scan.

How do I optimize a dbt DAG?

Reduce work by selecting the relevant subsection of the DAG rather than running every model. dbt’s workflow guidance describes model selection syntax for running DAG subsections. The right selection depends on whether downstream descendants are needed for the task: omit them only when the result you need does not depend on building them.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Account for incremental models in CI

For CI, dbt documents selecting modified models and their descendants. A modified incremental model may still take a full build in a new PR-specific schema: its target does not exist yet, so is_incremental() is false and dbt follows the full-build path. This can make CI slower and more expensive than a normal run against an existing target.

Where the warehouse supports zero-copy cloning, dbt describes cloning incremental models as an option for the first step of a CI job. Teams may still need to test both incremental behavior and full-refresh behavior. The setup and practical benefit depend on warehouse support and the CI environment; see Clone incremental models as the first step of your CI job.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

BigQuery-specific incremental options

These options apply to dbt’s BigQuery adapter; they are not universal settings for other warehouses. dbt documents three incremental strategies:

BigQuery strategy What dbt documents Decision context
merge The default incremental strategy. Consider for workloads that need to merge incremental rows into existing data.
insert_overwrite A documented incremental strategy. Assess against the model’s partitioning and the data that needs replacement.
microbatch A documented incremental strategy. Assess against the model’s time-based workload and adapter support.

dbt states that clustering can make operations for incremental models cheaper and faster with the supported merge and insert_overwrite strategies. That is not a guaranteed speedup: evaluate the strategy, table layout, and workload together. The adapter details are in BigQuery configurations.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Is the delay parsing or compiling the project?

If the wait happens before warehouse execution, changing an incremental filter or table layout may not address it. dbt Labs’ September 16, 2026 announcement of dbt v2 discusses parsing and compilation for large projects. Staff Developer Experience Advocate Joel Labes reports: “My benchmarking project with 10k nodes takes 70 seconds to compile on dbt 1.12.0, and just 17 seconds on dbt v2.” This is Labes’s result for his 10,000-node benchmarking project, not a universal performance expectation or an independent benchmark. The announcement is dbt v2 is GA.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.