Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос с виртуальной колонкой  [new]
Petrashkevich
Member

Откуда:
Сообщений: 72
Здравствуйте !!!
Есть запрос, который возвращает 217 сток мгновенно.
Добавляю к запросу виртуальную колонку и запрос выполняется полторы минуты.
Помогите пожалуйста решить загадку
Вот скрин
Картинка с другого сайта.
24 янв 19, 09:51    [21792914]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Petrashkevich,

так там закладочка у вас "План выполнения" там и посмотрите.
24 янв 19, 09:53    [21792919]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
Petrashkevich
Member

Откуда:
Сообщений: 72
Вы хотите сказать что от добавления в результат виртуальной колонки поменялся план выполнения ?
24 янв 19, 09:58    [21792929]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Petrashkevich
Вы хотите сказать что от добавления в результат виртуальной колонки поменялся план выполнения ?

у вавс вкладка не открывается?
24 янв 19, 10:00    [21792935]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
Petrashkevich
Member

Откуда:
Сообщений: 72
Планы разные.
Подскажите почему они разные и что нужно сделать.
Картинка с другого сайта.
24 янв 19, 10:14    [21792957]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Petrashkevich,

Разные потому что когда был сделан "старый" было другое состояние(таблицы, базы, сервера, марса), вы запрос изменили и был сделан новый план "на сейчас" который вот такой вот :)

Что там с инедксками, статистиками, если раньше соглашалось на merge

ну или RECOMPILE
24 янв 19, 10:17    [21792962]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
PizzaPizza
Member

Откуда:
Сообщений: 309
А что такое у вас ААА = 1?
Это присвоение такое?
24 янв 19, 10:20    [21792967]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
PizzaPizza
А что такое у вас ААА = 1?
Это присвоение такое?

испугался?
24 янв 19, 10:21    [21792969]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
PizzaPizza
Member

Откуда:
Сообщений: 309
TaPaK,

Никогда не использовал такую конструкцию. Выглядит дико
24 янв 19, 10:26    [21792976]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30726
PizzaPizza
TaPaK,

Никогда не использовал такую конструкцию. Выглядит дико
Синтаксис старый, известный. Но я предпочитаю использовать 1 AS AAA вместо AAA = 1, второе выглядит каким то неправильным.
24 янв 19, 10:28    [21792982]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
PizzaPizza
TaPaK,

Никогда не использовал такую конструкцию. Выглядит дико

то что вы чем то не пользуетесь, ничего не означает, нужна некая константа в результирующем наборе
24 янв 19, 10:29    [21792985]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
alexeyvg
PizzaPizza
TaPaK,

Никогда не использовал такую конструкцию. Выглядит дико
Синтаксис старый, известный. Но я предпочитаю использовать 1 AS AAA вместо AAA = 1, второе выглядит каким то неправильным.

ну я пишу [AAA] = 1, что не так, все AS фиг "выровняешь" что бы это не выглядело дико :)
24 янв 19, 10:30    [21792987]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
PizzaPizza
Member

Откуда:
Сообщений: 309
TaPaK
PizzaPizza
TaPaK,

Никогда не использовал такую конструкцию. Выглядит дико

то что вы чем то не пользуетесь, ничего не означает, нужна некая константа в результирующем наборе


Константы всегда через as делаю. Это же не присваивание переменной или case хотя и case тоже предпочитаю через as. Но это все вкусовщина конечно.
24 янв 19, 10:35    [21792993]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
PizzaPizza
Member

Откуда:
Сообщений: 309
alexeyvg
PizzaPizza
TaPaK,

Никогда не использовал такую конструкцию. Выглядит дико
Синтаксис старый, известный. Но я предпочитаю использовать 1 AS AAA вместо AAA = 1, второе выглядит каким то неправильным.


У всех видимо свои представления о прекрасном. Для меня = это сравнение, поэтому в селекте отвлекает. В set или where итп пожалуйста.
24 янв 19, 10:39    [21793006]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
PizzaPizza
alexeyvg
пропущено...
Синтаксис старый, известный. Но я предпочитаю использовать 1 AS AAA вместо AAA = 1, второе выглядит каким то неправильным.


У всех видимо свои представления о прекрасном. Для меня = это сравнение, поэтому в селекте отвлекает. В set или where итп пожалуйста.

для меня сравнение это ==, то в sql я вообще страдаю
ну и законный синтаксис
автор
SELECT [ ALL | DISTINCT ]
[ TOP ( expression ) [ PERCENT ] [ WITH TIES ] ]
<select_list>
<select_list> ::=
{
*
| { table_name | view_name | table_alias }.*
| {
[ { table_name | view_name | table_alias }. ]
{ column_name | $IDENTITY | $ROWGUID }
| udt_column_name [ { . | :: } { { property_name | field_name }
| method_name ( argument [ ,...n] ) } ]
| expression
[ [ AS ] column_alias ]
}
| column_alias = expression
} [ ,...n ]
24 янв 19, 10:41    [21793009]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
PizzaPizza
Member

Откуда:
Сообщений: 309
TaPaK,

Это кстати головной баг - после того, как много повожусь с запросами, потом начинается if ( a = b ) и потом туплю долго чё условие все время срабатывает.
24 янв 19, 10:47    [21793021]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
Petrashkevich
Member

Откуда:
Сообщений: 72
select  A.IdElements, A.IdElements, U.IdEmployee, U.IdPost, U.IdStructureLR, D.DateDay, G.FirstQuantityHour+G.SecondQuantityHour+G.ThirdQuantityHour, G.FirstQuantityHour+G.SecondQuantityHour+G.ThirdQuantityHour,
       D.IdFirstTypeDay, D.IdSecondTypeDay, D.IdThirdTypeDay, D.IdFourthTypeDay,
       D.FirstQuantityHour, D.SecondQuantityHour, D.ThirdQuantityHour, D.FourthQuantityHour,        
       U.SignBasis, U.SortNotBasis, U.IdGraphWork, U.PercentSalary,U.AddQuantityHour,
       P.TypeSalary, U.SignBasisCategory, U.TypeMove, AAA=1
 from StructureLR A
 inner join ViewTableWorkEmployee U on A.IdStructureLR = U.IdStructureLR and U.IdTableWorkType = 0 and U.IdMonth between month(@SDate) and month(@FDate) and U.TheYear between year(@SDate) and year(@FDate)
 inner join DetailsTableWork D on D.IdEmployee = U.IdEmployee and D.IdStructureLR = U.IdStructureLR and D.IdTableWork = U.IdTableWork
 inner join GraphWorkDetails G on U.IdGraphWork = G.IdGraphWork and G.DateDay = D.DateDay
 inner join Employee S on D.IdEmployee = S.IdEmployee
 inner join Post P on U.IdPost = P.IdPost
 where A.Lft between @IdLft and @IdRght and
       A.Rght between @IdLft and @IdRght
OPTION(RECOMPILE)


Добавил к запросу OPTION(RECOMPILE) Запрос стал выполняться мгновенно. Но это не решает проблему.
Не понятно, почему 10 лет процедура выбирала правильный план запроса, а теперь вдруг нет.
24 янв 19, 10:53    [21793028]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Petrashkevich
OPTION(RECOMPILE)


Добавил к запросу OPTION(RECOMPILE) Запрос стал выполняться мгновенно. Но это не решает проблему.
Не понятно, почему 10 лет процедура выбирала правильный план запроса, а теперь вдруг нет.

Ну вот, спустья 10 лет вы начнёте заниматься изцчением sql сервера, добро пожаловать в ад
24 янв 19, 10:55    [21793033]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
aleks222
Member

Откуда:
Сообщений: 849
Petrashkevich
select  A.IdElements, A.IdElements, U.IdEmployee, U.IdPost, U.IdStructureLR, D.DateDay, G.FirstQuantityHour+G.SecondQuantityHour+G.ThirdQuantityHour, G.FirstQuantityHour+G.SecondQuantityHour+G.ThirdQuantityHour,
       D.IdFirstTypeDay, D.IdSecondTypeDay, D.IdThirdTypeDay, D.IdFourthTypeDay,
       D.FirstQuantityHour, D.SecondQuantityHour, D.ThirdQuantityHour, D.FourthQuantityHour,        
       U.SignBasis, U.SortNotBasis, U.IdGraphWork, U.PercentSalary,U.AddQuantityHour,
       P.TypeSalary, U.SignBasisCategory, U.TypeMove, AAA=1
 from StructureLR A
 inner join ViewTableWorkEmployee U on A.IdStructureLR = U.IdStructureLR and U.IdTableWorkType = 0 and U.IdMonth between month(@SDate) and month(@FDate) and U.TheYear between year(@SDate) and year(@FDate)
 inner join DetailsTableWork D on D.IdEmployee = U.IdEmployee and D.IdStructureLR = U.IdStructureLR and D.IdTableWork = U.IdTableWork
 inner join GraphWorkDetails G on U.IdGraphWork = G.IdGraphWork and G.DateDay = D.DateDay
 inner join Employee S on D.IdEmployee = S.IdEmployee
 inner join Post P on U.IdPost = P.IdPost
 where A.Lft between @IdLft and @IdRght and
       A.Rght between @IdLft and @IdRght
OPTION(RECOMPILE)


У вас процедура с параметрами - сервер пытается угадать...
Если позволяет сервер - пишите option ( OPTIMIZE FOR ( @IdLft UNKNOWN, ...

Добавил к запросу OPTION(RECOMPILE) Запрос стал выполняться мгновенно. Но это не решает проблему.
Не понятно, почему 10 лет процедура выбирала правильный план запроса, а теперь вдруг нет.
24 янв 19, 11:00    [21793040]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30726
Petrashkevich
Не понятно, почему 10 лет процедура выбирала правильный план запроса, а теперь вдруг нет.
Статистика через 10 лет перестала соответствовать реальным данным? Обновите её.
24 янв 19, 12:32    [21793194]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
Petrashkevich
Member

Откуда:
Сообщений: 72
[/quot]Статистика через 10 лет перестала соответствовать реальным данным? Обновите её.[/quot]
Реорганизовал все индексы, обновил всю статистику, перестроил все вьюшки.
А без OPTION(RECOMPILE) всё равно тормозит
24 янв 19, 13:37    [21793307]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Petrashkevich,

оба плана в xml покажите
24 янв 19, 13:40    [21793308]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7385
Petrashkevich,

потому, что статистика распределения данных по переменным неравномерная по сравнению с остальными значениями. Планы выполнения разные.
24 янв 19, 14:08    [21793355]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с виртуальной колонкой  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Владислав Колосов
Petrashkevich,

потому, что статистика распределения данных по переменным неравномерная по сравнению с остальными значениями. Планы выполнения разные.

+
Нужно обязательно дунуть, потому что если не дунуть, то никакого чуда
24 янв 19, 14:12    [21793361]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить