[Из песочницы] Оптимизация загрузки в задаче «Остатки на складах» с помощью секционирования в SQL Server
Комментарии (9)
2 июня 2017 в 13:48
+1↑
↓
Как у вас просто всё… Нет территорий, нет мест хранения, нет брака и т.п.…
Извините, статья хорошая, это крик души просто.2 июня 2017 в 14:53
0↑
↓
После слов:Теперь после построения кластерного индекса мы можем заново выполнить запросы, изменив агрегацию суммы как в представлении:
разве не надо в одном из запросов использовать таблицу TurnoverHour?2 июня 2017 в 14:55 (комментарий был изменён)
0↑
↓
В Enterprise редакции — не обязательно, оптимизатор сам найдет ее. В младших редакциях — надо, причем с обязательным указанием
with(noexpand)
2 июня 2017 в 16:27 (комментарий был изменён)
0↑
↓
Поскольку селективность по ProductID лучше (продуктов больше чем складов), может лучше ProductID на первое место поставить, не знаю ускорит ли это работу для группировок или замедлит, но обычно торговые/складские системы делают поиск по условию по товару или набору товаров, а значит ProductID на первом месте должен ускорить поиск/фильтр где в условии есть товарpartition by StorehouseID, ProductID
2 июня 2017 в 16:58 (комментарий был изменён)
0↑
↓
Для того, чтобы посчитать оконную функцию — надо сделать разбиение по обоим полям. В такой ситуации не важно что писать первым — оптимизатор сам выберет индекс с лучшей селективностью, если таковой вообще существует.
2 июня 2017 в 17:18 (комментарий был изменён)
0↑
↓
уточню, я имею ввиду поиск по кластерному/составному индексу, допустим нам нужно узнать сколько на остатках разных чипсов, но не остальных товаров, пишу:
если productId в начале, то это ускорит поиск по индексу, для набора товаров, а не для всех товаров в таблице.where productId in (1,8,9,101,647) and StorehouseID in (1,5, 7)
Если же первым будет StorehouseID у которого плохая селективность, то конечно подходящего индекса для особого ускорения не будет.
2 июня 2017 в 16:39
0↑
↓
это для чего?count_big(*) qty
2 июня 2017 в 16:54
0↑
↓
Без
count_big(*)
кластерный индекс на представлении с группировкой не создается, ограничение сервера такое.
2 июня 2017 в 18:48
0↑
↓
set dateformat ymd; declare @start datetime = '2015-02-28', @finish datetime = '2015-02-28' declare @start_month datetime = convert(datetime,convert(varchar(9),@start,120)+'1',120) select @start_month;
получаю select @start_month; = 2015–02-21 00:00:00.000
это нормально?