Ниже приведен сценарий, который у меня есть: у меня есть хранимая процедура, которая возвращает данные, объединяя 4 таблицы. Дважды в середине дня происходит массовая загрузка в одну из 4 вышеприведенных таблиц. Нагрузка продолжается 10-15 минут. Я не хочу, чтобы пользовательский интерфейс, который вызывает эту хранимую процедуру, зависал/блокировался/замедлялся в течение этого 10-15-минутного окна. Меня не волнует отображение грязных/незафиксированных данных из приведенных выше таблиц. Ниже приведены мои запросы:
Нужно ли использовать NOLOCK только для таблицы, которая загружается в течение дня, ИЛИ NOLOCK нужно добавить ко всем 4 таблицам соединения. Например,
SELECT * FROM Table1 T1 WITH (NOLOCK) --this is the table that will be bulk-loaded twice during the day INNER JOIN Table2 T2 WITH (NOLOCK) INNER JOIN Table3 T3 WITH (NOLOCK) INNER JOIN Table4 T4 WITH (NOLOCK)
ИЛИ этого достаточно
SELECT * FROM Table1 T1 WITH (NOLOCK) --this is the table that will be bulk-loaded twice during the day INNER JOIN Table2 T2 INNER JOIN Table3 T3 INNER JOIN Table4 T4
Если я добавлю SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED в начале процедуры извлечения и верну его в READ COMMITTED в конце, будет ли разница?
Спасибо
Викас
IS
, а не блокировкаSCH-S
. - person Martin Smith   schedule 05.08.2013