Size: a a a

SqlCom.ru - уголок MS SQL

2021 June 09

A

Andrey in SqlCom.ru - уголок MS SQL
Да, понятно
источник

СС

Сергей С. in SqlCom.ru - уголок MS SQL
а что понятно?) и про что речь в 'так и думал'?
интересен ход мысли)
источник

I

ILYA in SqlCom.ru - уголок MS SQL
По куче разных причин) статистика, параметры, изменилось количество строчек итд
источник

СС

Сергей С. in SqlCom.ru - уголок MS SQL
не могу их найти, смог найти только это
источник

СС

Сергей С. in SqlCom.ru - уголок MS SQL
для обоих запросов все по нулям в memory grants
источник

A

Andrey in SqlCom.ru - уголок MS SQL
Понятно стало ещё по 15.0
источник

A

Andrey in SqlCom.ru - уголок MS SQL
Вариация в планах подозрительна, подозревал новые возможности сиквела.
источник

СС

Сергей С. in SqlCom.ru - уголок MS SQL
а можно как-то объяснить, зачем во втором плане нужны top и compute scalar?
источник

АР

Александр Ройтман... in SqlCom.ru - уголок MS SQL
1. Выяснить почему форма плана именно такая можно анализируя сам план, а не его фотографию.
2. "Почти одинаковые запросы" не обязаны иметь одинаковые планы.
3. В вашем случае может быть, например, поэтому
drop table if exists #t;
create table #t (id int primary key, v1 int, v2 int, index ix_v2 (v2));
insert into #t values (1, 1, 1);

declare @id int = 1, @v1 int = 2, @v2 tinyint = 3;

set statistics xml on;
update #t set v1 = @v1 where id = @id;
update #t set v1 = @v1, v2 = @v2 where id = @id;
set statistics xml off;
источник

A

Andrey in SqlCom.ru - уголок MS SQL
Не знаю в чем причина, может более знающие коллеги подскажут.
источник

АР

Александр Ройтман... in SqlCom.ru - уголок MS SQL
Зачем мне планы из моего-же примера? :)
источник

СС

Сергей С. in SqlCom.ru - уголок MS SQL
я думал, вы поможете по планам определить в чем суть)
источник

СС

Сергей С. in SqlCom.ru - уголок MS SQL
тут что-то про несоответствие типов?
tinyint <—> int
источник

АР

Александр Ройтман... in SqlCom.ru - уголок MS SQL
Я вам в примере показал в чем суть - она в индексе по одному из столбцов в апдейте.
источник

A

Andrey in SqlCom.ru - уголок MS SQL
Пригодятся.
источник

СС

Сергей С. in SqlCom.ru - уголок MS SQL
честно говоря, стало еще менее понятно..
в обоих запросах одинаковые предикаты поиска
источник

СС

Сергей С. in SqlCom.ru - уголок MS SQL
источник

АР

Александр Ройтман... in SqlCom.ru - уголок MS SQL
Подробнее - если в апдейте изменяется столбец, включенный в некластерный индекс, то сначала будет вычислен флаг, показывающий будет ли реально изменено значение такого столбца.
Это надо для исключения ненужных некластерного индекса, ибо это дорогая операция.
Поэтому такая форма плана - Clusterd Index Seek - Compute Scalar - Clustered Index Update

Смотреть нужно свойства не корневого оператора, а Clustered Index Update. Если обновляется какой-то индекс, то он там будет указан.
источник

СС

Сергей С. in SqlCom.ru - уголок MS SQL
А почему два compute Scalar и зачем нужен top?
источник

АР

Александр Ройтман... in SqlCom.ru - уголок MS SQL
Не могу сказать - не разбирался с этим.
источник