A materialized view doesn’t track stale rows the way a computed
column does — there’s no smaller unit than the whole view to recompute
from a saved query. In LanceDB Embedded, every refresh rebuilds the view
completely with no incremental step; LanceDB Enterprise’s server chooses
the refresh mode instead, unless the caller forces a full rebuild. See
Refresh a materialized view.
Why this matters
Appending rows is cheap: the next refresh only fills what’s new, not what it already computed. Updating an input row is also cheap in the same way — the derived column keeps its old value until the next refresh notices the input changed. Staleness is tracked per fragment, not per row: the refresh recomputes every row in a fragment where at least one input moved, which can re-evaluate rows whose own value didn’t actually need it, not strictly only the row that changed. Nothing is recomputed between refreshes, so a derived column can be stale right up until you call for one.What to read next
Refresh a computed column
The exact fill/recompute/leave-alone rules, with examples.
Adaptive Execution
How the units this planner produces get sized and run.