Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / WITH (NOLOCK) / 6 сообщений из 6, страница 1 из 1
25.11.2002, 09:42:13
    #32071760
Осирис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WITH (NOLOCK)
Добрый день.


Если у меня запрос следующего вида:

select * from
(
select ... from a
union all
select ... from b
) t WITH (NOLOCK)
where ....


Хинт будет накладываться на все вложенные подзапросы или мне нужно указывать это явно:


select * from
(
select ... from a WITH (NOLOCK)
union all
select ... from b WITH (NOLOCK)
) t
where ....


Спасибо за помощь.
...
Рейтинг: 0 / 0
25.11.2002, 10:59:40
    #32071806
Белов Владимир
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WITH (NOLOCK)
имхо, нужно указывать явно для каждой таблицы
...
Рейтинг: 0 / 0
25.11.2002, 11:06:02
    #32071810
Flint-San
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WITH (NOLOCK)
не стану лезть в BOL за подробным описанием
просто напишу как я понимаю этот запрос
первая конструкция объединение двух таблиц, а куда? Правильно через промежуточную временную создаваемую сервером в tempdb и какой смысл тогда указывать хинт на временную таблицу?
вторая разумно определяет что как раз на время объед-я
двух таблиц позволить "грязное-dirty" считывание из таблиц базы.
На мой взгляд правильней вторая конструкция.
...
Рейтинг: 0 / 0
25.11.2002, 12:34:46
    #32071884
Осирис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WITH (NOLOCK)
Рассуждая подобным образом можно обобщить это рассуждение на любые вложенные запросы ?

Например select .. from (select .. from ...).
...
Рейтинг: 0 / 0
25.11.2002, 20:02:41
    #32072227
Осирис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WITH (NOLOCK)
Хм. Походил, подумал и возник следующий вопрос.

Если я не говорю with (nolock) то на таблицу ставится блокировка.

А что будет происходить в случае такого запроса:

select * from
(
select ... from a
union all
select ... from b
) t
where ....
group by....
order ...

3 варианта:

1) На таблицы a,b ставится блокировка на время выполнения ВСЕГО запроса, так как это одна неявная транзакция
2) сначала ставится блокировка на таблицу a, потом с a блокировка снимается и ставится на b, потом с b снимается и ставится на ту временную в tempdb
3) Сначала ставится блокировка на a и b, происходит их объединение во временную, затем блокировка снимается с a и b и вся дальнейшая работа происходит с временной (where, group, order). Отличием этого варианта от первого является то, что a и b блокированны не на все время выполнения запроса, а лишь на один из его этапов - объединение таблиц.

Мне кажется, что правильным вариантом является третий, но не уверин. Поэтому хочется услышать мнение экспертов.
...
Рейтинг: 0 / 0
25.11.2002, 23:55:20
    #32072286
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WITH (NOLOCK)
Все уместилось в два предложения из BOL

1. "In SQL Server 2000, all lock hints are propagated to all the base tables and views that are referenced in a view."
Думаю можно приравнять подзапрос ко view

2. "In addition, SQL Server performs the corresponding lock consistency checks."
По-моему это означает, что хинты могут игнорироватся оптимизатором.

Кроме того
"The table hints are ignored if the table is not accessed by the query plan. This may be a result of the optimizer's choice not to access the table at all, or because an indexed view is accessed instead."

И еще
"If a table (including system tables) contains computed columns and the computed columns are computed by expressions or functions accessing columns in other tables, the table hints are not used on those tables (the table hints are not propagated). For example, a NOLOCK table hint is specified on a table in the query. This table has computed columns that are computed by a combination of expressions and functions (accessing columns in another table). The tables referenced by the expressions and functions do not use the NOLOCK table hint when accessed."
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / WITH (NOLOCK) / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]