Я був майже впевнений, що потрібно вказати NOLOCK
для кожногоJOIN
в запиті. Але мій досвід був обмежений SQL Server 2005.
Коли я подивився MSDN лише для підтвердження, я не зміг знайти нічого визначеного. Наведені нижче твердження, схоже, змушують мене думати, що у 2008 році ваші дві заяви вище є рівнозначними, хоча для 2005 року це не так:
[SQL Server 2008 R2]
Усі підказки щодо блокування поширюються на всі таблиці та представлення, до яких доступний план запитів , включаючи таблиці та представлення, на які посилається представлення даних. Також SQL Server виконує відповідні перевірки стійкості блокування.
[SQL Server 2005]
У SQL Server 2005 усі підказки блокування поширюються на всі таблиці та представлення, на які посилається представлення. Також SQL Server виконує відповідні перевірки стійкості блокування.
Крім того, зазначте, що це стосується і 2005, і 2008 років:
Підказки таблиці ігноруються, якщо таблиця не має доступу до плану запитів. Це може бути викликано тим, що оптимізатор вирішив взагалі не отримувати доступ до таблиці або через те, що натомість доступ до індексованого перегляду. В останньому випадку доступ до індексованого виду можна запобігти, використовуючи OPTION (EXPAND VIEWS)
підказку запиту.