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

SELECT Партия, Товар, SUM(Сумма), SUM(Количество) FROM Проводки
WHERE ДатаОперации < @DATE AND СчетДБ IN (КодСчетаТовары,КодСчетаПродукция)
GROUP BY  Партия, Товар

UNION ALL

SELECT Партия, Товар, -SUM(Сумма), -SUM(Количество) FROM Проводки
WHERE ДатаОперации < @DATE AND СчетКт IN (КодСчетаТовары,КодСчетаПродукция)
GROUP BY  Партия, Товар


Так как записей довольно много ощутимо тормозит.

Вопрос следущий.
Какой набор индексов должен быть, для ускорения данной операции.

ЗЫ Чисто академический интерес оптимизации запросов.
13 май 14, 12:42    [16009529]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о выборке остатков.  [new]
Crimean
Member

Откуда:
Сообщений: 13147
сильно не ускорите, так как будет скан чувствительного объема проводок всегда при такой постановке
и, более того, чем дальше - тем тормозить будет больше, так как вы всегда суммируете все проводки от начала времен
радикально можно что-то поменять сменив схему данных - например, введя некое "закрытие периодов" с сохранением предрасчитанных агрегатов - тогда вы частично избавитесь от больших сканов
а "идеал" - хранение остатков на даты для тупой выборки - достижим ой как не всегда
13 май 14, 12:49    [16009570]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о выборке остатков.  [new]
НачинающийОптимизатор
Guest
2Crimean,
То есть никакие индексы мне особо не помогут, ну там индексы например по Партия+Товар.
Нарезка данных наше все ?
13 май 14, 13:19    [16009784]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о выборке остатков.  [new]
Glory
Member

Откуда:
Сообщений: 104751
НачинающийОптимизатор
ощутимо тормозит.

Что именно ?
1ый select ? или 2ой select ? их UNION ALL ?
13 май 14, 13:38    [16009887]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о выборке остатков.  [new]
НачинающийОптимизатор
Guest
2Glory, когда смотрю план просто первого SELECT видно, что он использует индекс поля ДатаОперации, я так понимаю потому что он кластерный. Но дело даже не в этом, вопрос в том, какой необходим набор индексов, для ускорения запросов данного типа.

Или для сферического коня в вакууме обсуждение бессмысленно ?
13 май 14, 14:18    [16010160]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о выборке остатков.  [new]
Glory
Member

Откуда:
Сообщений: 104751
НачинающийОптимизатор
, что он использует индекс поля ДатаОперации, я так понимаю потому что он кластерный.

Сканирование кластерного индекса == сканирование таблицы
Потому что кластерный индекс и есть таблица
13 май 14, 14:22    [16010185]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о выборке остатков.  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
НачинающийОптимизатор,

Почитайте про columnstore индексы
13 май 14, 15:23    [16010648]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить