我正在研究使用READPAST
提示来减少我们应用程序财务子系统中的资源锁定。
这似乎是一个不错的方法,因为金融交易记录只会被添加,不会被更新或删除。唯一会被跳过的行是插入事务中的全新行;在事务提交之前,它们实际上不存在于外部世界。
但是,我注意到使用我已READPAST
提示的索引视图的查询性能较差。比较查询计划,通过提示,查询优化器选择不使用索引视图,而是退回到将其视为常规视图。
我不确定为什么会这样;我想索引视图就像任何其他索引一样,因为键可以在操作期间被锁定,并且添加的READPAST
工作方式类似。
SELECT TOP 1 isa.InvoiceId
FROM Financial_InvoiceSummaryAmounts isa WITH (READPAST)
WHERE isa.TotalOwedAmount = 0.0
Run Code Online (Sandbox Code Playgroud)
SELECT TOP 1 isa.InvoiceId
FROM Financial_InvoiceSummaryAmounts isa
WHERE isa.TotalOwedAmount = 0.0
Run Code Online (Sandbox Code Playgroud)
添加NOEXPAND
提示似乎也有效,但我有兴趣了解更多关于可能READPAST
导致查询优化器首先做出该选择的原因(作为完整答案的一部分)。
performance sql-server hints materialized-view query-performance