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

Откуда:
Сообщений: 13148
или я чего не так готовлю? писать - да - в разы проще, кто бы спорил. но.. я ожидал в разы уменьшения стоимости, а тут увеличение, даже с "ужимками"..
6 окт 09, 20:07    [7750309]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
хм. даже наоборт из временной таблицы и динамического запроса , остался динамический запрос с pivot, чем повысили быстродействие раз в шесть. вообще смотреть надо, что там такое. случаи разные бывают.
6 окт 09, 20:15    [7750330]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Ken@t
хм. даже наоборт из временной таблицы и динамического запроса , остался динамический запрос с pivot, чем повысили быстродействие раз в шесть. вообще смотреть надо, что там такое. случаи разные бывают.


так времянка без индексов небось была?
6 окт 09, 20:30    [7750355]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
С индексами. Завтра планы посмотрю.
6 окт 09, 20:41    [7750373]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
Anddros
Member

Откуда:
Сообщений: 1077
Crimean
или я чего не так готовлю? писать - да - в разы проще, кто бы спорил. но.. я ожидал в разы уменьшения стоимости, а тут увеличение, даже с "ужимками"..

Как-то специально сравнивал pivot со стандартным 'заменителем' - max(case...) + group by на несложном примере. Планы буквально один-в-один. Стоимость и время выполнения, разумеется, тоже.
6 окт 09, 20:42    [7750374]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Crimean, против физики не попрёшь, а вот синтаксический сахар это приятно. Честно, не могу понять, как можно было ожидать увеличения производительности. E=mc2 хоть тресни. И какие там ужимки, если планы запросов почти идентичны (Более того частенько они (PIVOT планы) мне меньше нравятся - ну там лишние колонки иногда ...).
6 окт 09, 21:07    [7750425]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
ээ .. мы все еще говорим про "разворачивание" вширь отчета с агрегатами из "узкой" таблицы? тогда классика - куча подзапросов или left join, что почти одно и то же в числе == числу столбцов. как следствие "узкая таблица" "поднимается" столько раз, сколько столбцов с фильтрацией и т.д. и т.п. в итоге для 20+ столбцов это уже сносит крышу оптимизатору, а при сложных фильтрах все еще более усугубляется
а пайвот типа поднимает все 1 раз.. я ждал экономии тут, в итоге еле-еле почти впихнул в "старую" стоимость. но код проще в разы - кто бы спорил, особенно с CTE :)
6 окт 09, 21:27    [7750459]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
iljy
Member

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

именно о нем и говорим, ибо запросы
select id, [1],[2] from
   Table1
pivot
( max(field1) for field2 in ([1],[2])) pvt
и
select id, max(case field2 when 1 then field1) [1], max(case field2 when 2 then field1) [2]
from Table1
group by id
полностью эквивалентны, и планы для них в подавляющем большинстве случаев одинаковые.
6 окт 09, 21:50    [7750502]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
iljy
Member

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

пардон

select id, max(case field2 when 1 then field1 end) [1], max(case field2 when 2 then field1 end) [2]
6 окт 09, 21:58    [7750512]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Хотя я могу представить ситуацию когда PIVOT будет медленнее. Если в таблице много полей, есть индекс по id,field1 и field1 принимает много значений (много больше 2 в примере). Тогда схема с LEFT JOIN наверняка использует этот индекс, а значение field2 будет выбираться RID Lookup, и цена этого решения может быть меньше за счет узости индекса по сравнению со всей записью.
6 окт 09, 22:11    [7750538]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
2 iljy

хм.. попробую еще вариант с case..
я пробовал вариант с подзапросами и он всегда был дешевле чем pivot!
6 окт 09, 22:33    [7750593]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
iljy
Member

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

планы покажите
6 окт 09, 23:41    [7750795]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Извините, но не ожидал в топике о PIVOT про LEFT JOIN-ы. Закостенелось мышления. :(
6 окт 09, 23:49    [7750809]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
iljy
планы покажите


да платы-то простые.. (атач) 1 скан для пайвота и куча джойнов для конструкции с подзапросами
"узкая" таблица состоит из двух - описатели и значения
стоимости сравнивал в профилере, вариант с подзапросами по чтениям сильно дешевле чем пайвот
p.s.
проверял на большом числе параметров и на достаточно большом объеме данных

К сообщению приложен файл. Размер - 0Kb
7 окт 09, 10:53    [7751903]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Crimean,
... а сами запросы? странные у вас планы какие-то... Но вообще стоимость сама по себе ни о чем не говорит.
7 окт 09, 11:07    [7752009]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
iljy
Member

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

и планы выложите не картинкой, а текстом или в виде .sqlplan
7 окт 09, 11:10    [7752035]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
iljy
Crimean,

и планы выложите не картинкой, а текстом или в виде .sqlplan


чуть позже, когда руки дойдут стендик собрать. я для себя выводы сделал - пайвот сопоставим с агрегацией с case и проигрывает "точечным подчиткам" параметров
план более чем очевидный - пайвот сканит таблицу 1 раз, вариант с CASE тоже будет сканить 1 раз, "мой" вариант - подзапросы по числу столбцов
я почему-то считал что 1 скан таблицы даст преимущество. судя по всему это не так
7 окт 09, 11:45    [7752302]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
iljy
Member

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

я же написал - это зависит от индексов и распределения значений. И вообще - стоимость сама по себе малоинформативна.
7 окт 09, 12:40    [7752746]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT только у меня всегда дороже "стандарта"?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
iljy
Crimean,

я же написал - это зависит от индексов и распределения значений. И вообще - стоимость сама по себе малоинформативна.


"стоимость" - я сравнивал cpu / reads в профилере, это достаточно информативно
7 окт 09, 14:40    [7753746]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить