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