Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Блокировки и конструкция update ... from ... inner join ...  [new]
блокировщик строк запросами
Guest
Пусть уровень изоляции read commited;

	update t0
	set
		t0.__cnt1 = isnull(t.cnt1, 0),
		t0.__cnt2 = isnull(t.cnt2, 0)
	from
		(
			select
				t1.id_t0,
				sum(iif(t1.flag1 = 1 and t1.data is not null and t1.data <> '', 1, 0)) as cnt1,
				sum(iif(t1.data is not null and t1.data <> '', 1, 0)) as cnt2
			from
				tbl1 t1
					inner join
				tbl2 t1 on
					t1.id_t1 = t1.id_t1
					and t1.is_deleted = 0
					and t1.is_hidden = 0
			group by
				t1.id_t0
		) t
			right join
		tbl0 t0 on t.id_t0 = t0.id_t0;


Движок выполняющий запрос, при чтении таблиц t1 и t2 наложит S или U блокировку на считанные строки и U блокировки на считанные строки t0 и потом конвертирует последнее в X блокировки?
11 янв 14, 17:05    [15401731]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки и конструкция update ... from ... inner join ...  [new]
step_ks
Member

Откуда:
Сообщений: 936
посмотрите профайлером или соответствующим traceon
11 янв 14, 18:02    [15401907]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки и конструкция update ... from ... inner join ...  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
блокировщик строк запросами,

Может, я, конечно, буквоед, но как так: и tbl1, и tbl2 используют один и тот же алиас t1?!
И приведите, пожалуйста пример, когда может быть
t1.data is null and t1.data <> ''
??
ИМНО, достаточно просто
t1.data <> ''
11 янв 14, 18:28    [15401976]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки и конструкция update ... from ... inner join ...  [new]
блокировщик строк запросами
Guest
iap,

там not

(про алиасы да верно, search/replace)
11 янв 14, 19:05    [15402096]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки и конструкция update ... from ... inner join ...  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
блокировщик строк запросами
iap,

там not
Вот именно. Читать внимательно можете?
11 янв 14, 19:08    [15402101]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки и конструкция update ... from ... inner join ...  [new]
блокировщик строк запросами
Guest
iap

и привидите пример

t1.data is null and t1.data <> ''



в примере

в примере

t1.data is not null and t1.data <> ''

что эквивалентно

not(t1.data is     null or t1.data ='')
11 янв 14, 19:49    [15402269]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки и конструкция update ... from ... inner join ...  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
блокировщик строк запросами,
facepalm.jpg

iap поэтому вас и спрашивает, найдите такую ситуацию чтобы одновременно было и " is null " и заодно и " <> '' ".

Т.к. любой оператор с NULL (кроме IS) не есть истина, то писать условие излишне.

блокировщик строк запросами
Движок выполняющий запрос, при чтении таблиц t1 и t2 наложит S или U блокировку на считанные строки и U блокировки на считанные строки t0 и потом конвертирует последнее в X блокировки?
По плану запроса видно кто и когда что наложит.

Судя по всему он будет идти по tbl0 и ставить U локировку, далее считывать набор строк из tbl1 и tbl2 ставя предварительно S локировки, далее ставить X на tbl0 и менять данные, далее снимать локировки с tbl1 и tbl2. И так далее.

U ставится для тех данных которые меняются - это блокировка для намерянного дальнейшего изменения (X).
Она может просто снятся только в случае если строка в итоге не должна меняться, к примеру дополнительный фильтр (из WHERE) стработал. В остальных случаях всегда превращается в X.
12 янв 14, 06:31    [15403941]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки и конструкция update ... from ... inner join ...  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
блокировщик строк запросами
в примере

в примере

t1.data is not null and t1.data <> ''

что эквивалентно

not(t1.data is     null or t1.data ='')
Это эквивалентно:
t1.data <> ''

Вам просто пишут, что можно упростить запрос, условие "t1.data is not null" излишнее.
12 янв 14, 12:31    [15404230]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить