|
|
|
WITH (NOLOCK)
|
|||
|---|---|---|---|
|
#18+
Добрый день. Если у меня запрос следующего вида: 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 .... Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2002, 09:42:13 |
|
||
|
WITH (NOLOCK)
|
|||
|---|---|---|---|
|
#18+
имхо, нужно указывать явно для каждой таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2002, 10:59:40 |
|
||
|
WITH (NOLOCK)
|
|||
|---|---|---|---|
|
#18+
не стану лезть в BOL за подробным описанием просто напишу как я понимаю этот запрос первая конструкция объединение двух таблиц, а куда? Правильно через промежуточную временную создаваемую сервером в tempdb и какой смысл тогда указывать хинт на временную таблицу? вторая разумно определяет что как раз на время объед-я двух таблиц позволить "грязное-dirty" считывание из таблиц базы. На мой взгляд правильней вторая конструкция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2002, 11:06:02 |
|
||
|
WITH (NOLOCK)
|
|||
|---|---|---|---|
|
#18+
Рассуждая подобным образом можно обобщить это рассуждение на любые вложенные запросы ? Например select .. from (select .. from ...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2002, 12:34:46 |
|
||
|
WITH (NOLOCK)
|
|||
|---|---|---|---|
|
#18+
Хм. Походил, подумал и возник следующий вопрос. Если я не говорю 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 блокированны не на все время выполнения запроса, а лишь на один из его этапов - объединение таблиц. Мне кажется, что правильным вариантом является третий, но не уверин. Поэтому хочется услышать мнение экспертов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2002, 20:02:41 |
|
||
|
WITH (NOLOCK)
|
|||
|---|---|---|---|
|
#18+
Все уместилось в два предложения из 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." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2002, 23:55:20 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32071806&tid=1818511]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
39ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 304ms |

| 0 / 0 |
