SQL Server 是否会缓存非持久化计算列的结果以便可以重复使用而不会产生重新计算的成本?
附加上下文 我一直建议如果使用计算列,你应该使用 PERSISTED 选项,除非你期望插入/更新频率高于读取频率,或者你需要比读取更好的插入/更新性能数据(即因为计算成本必须在其中一个或另一个上产生,所以决定实际上是你想支付该成本的地方)。
还考虑了计算数据的额外存储,但通常这可以忽略不计且便宜,因此无需过多考虑。
但是,我想检查我的建议是否完全准确,因为 SQL 可能更智能……即一旦 SQL 计算出一个计算列,它就可以将这个值记录在内存中,这样它就不必在后续的计算中重新计算该值查询。SQL 可以在缓存值上有一个时间戳,在基础记录数据上有另一个时间戳,以说明自计算值计算以来该记录是否已更改,以确定缓存值是否仍然有效。
是否有类似的东西/它是否取决于可用资源(例如内存)或其他因素(例如缓存值是否具有超出进程生命周期的 TTL)?我从来没有读过任何暗示这存在的东西,但如果没有在幕后进行一些优化,我会感到惊讶。