Я исследую, используя 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
по которой оптимизатор запросов сделал такой выбор в первую очередь (как часть полного ответа).