We eventually had to materialize the view to keep latencies acceptable, which introduces its own complexity with lag and invalidation. It seems like you always pay the tax somewhere—either in the query cost or in managing the state of the read model.