Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
НачинающийОптимизатор
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] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13147 |
сильно не ускорите, так как будет скан чувствительного объема проводок всегда при такой постановке и, более того, чем дальше - тем тормозить будет больше, так как вы всегда суммируете все проводки от начала времен радикально можно что-то поменять сменив схему данных - например, введя некое "закрытие периодов" с сохранением предрасчитанных агрегатов - тогда вы частично избавитесь от больших сканов а "идеал" - хранение остатков на даты для тупой выборки - достижим ой как не всегда |
13 май 14, 12:49 [16009570] Ответить | Цитировать Сообщить модератору |
НачинающийОптимизатор
Guest |
2Crimean, То есть никакие индексы мне особо не помогут, ну там индексы например по Партия+Товар. Нарезка данных наше все ? |
13 май 14, 13:19 [16009784] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Что именно ? 1ый select ? или 2ой select ? их UNION ALL ? |
||
13 май 14, 13:38 [16009887] Ответить | Цитировать Сообщить модератору |
НачинающийОптимизатор
Guest |
2Glory, когда смотрю план просто первого SELECT видно, что он использует индекс поля ДатаОперации, я так понимаю потому что он кластерный. Но дело даже не в этом, вопрос в том, какой необходим набор индексов, для ускорения запросов данного типа. Или для сферического коня в вакууме обсуждение бессмысленно ? |
13 май 14, 14:18 [16010160] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Сканирование кластерного индекса == сканирование таблицы Потому что кластерный индекс и есть таблица |
||
13 май 14, 14:22 [16010185] Ответить | Цитировать Сообщить модератору |
WarAnt Member Откуда: Питер Сообщений: 2423 |
НачинающийОптимизатор, Почитайте про columnstore индексы |
13 май 14, 15:23 [16010648] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |