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