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

Откуда:
Сообщений: 10
Добрый день всем.
Может кто из личного опыта подскажет решение:
Существует таблица с клиентами за 10 лет (около 7 млн. уникальных записей)
Таблица заказов за каждый год отдельная (т.е. Orders2010, Orders2011 и т.д.)
Как правило, анализируется только текущий календарный год. Остальные нужны раз в 2-3 месяца.
Хочу максимально ускорить получение результатов при джойне этой таблицы с таблицей заказов Orders.

Выбираю из таких вариантов:
1. Добавить в таблице клиентов булевы поля для каждого года, проставить TRUE если в году этот клиент делал заказ, FALSE, если не делал. Сделать на этих булевых полях некластеризованые индексы. Тогда при запросах сразу буду сокращать выборку с помощью WHERE YEARXXXX=TRUE.
2. Разбить таблицу клиентов на отдельные таблицы для каждого года. В таблице по году будут только те клиенты, которые делали заказ в этом году. Если будет нужна инфа по нескольким годам - делать UNION ALL.

Может кто сталкивался с таким на практике или знает третий вариант решения?
27 ноя 13, 17:41    [15200693]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по быстродействию  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
Хочу максимально ускорить получение результатов при джойне этой таблицы с таблицей заказов Orders.


Абстрактный запрос по абстрактно индексированным данным вряд ли можно ускорить.
27 ноя 13, 17:49    [15200739]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по быстродействию  [new]
JAVARookie
Member

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

Я имел в виду - хочется выбрать из представленных вариантов наиболее быстрый или может есть еще какой нить красивый способ для моей ситуации. Вы скажите, каких данных не хватает - я отпишу.
Посмотрел, за 2012-2013 год 1,1 млн. из 7 млн. клиентов засветились...
27 ноя 13, 18:02    [15200813]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по быстродействию  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
хочется выбрать из представленных вариантов наиболее быстрый


Еще раз. Не бывает универсального быстрого варианта.

автор
Вы скажите, каких данных не хватает - я отпишу.


Как минимум не хватает запроса, у которого проблемы с быстродействием, плана его выполнения (статистика Time и IO тоже будет не лишней) и структуры таблиц с индексами.
27 ноя 13, 18:07    [15200852]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по быстродействию  [new]
SERG1257
Member

Откуда:
Сообщений: 2877
JAVARookie
1. Добавить в таблице клиентов булевы поля для каждого года, проставить TRUE если в году этот клиент делал заказ, FALSE, если не делал. Сделать на этих булевых полях некластеризованые индексы. Тогда при запросах сразу буду сокращать выборку с помощью WHERE YEARXXXX=TRUE.
Плохая идея
JAVARookie
2. Разбить таблицу клиентов на отдельные таблицы для каждого года. В таблице по году будут только те клиенты, которые делали заказ в этом году. Если будет нужна инфа по нескольким годам - делать UNION ALL.
Тоже плохая идея
JAVARookie
третий вариант решения

1 Смотреть на запросы которые надо ускорить.
2 Взвешивать за и против каждого подхода
3 Тестировать полученные результаты

Форум может помочь только для пункта 2
27 ноя 13, 18:08    [15200861]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по быстродействию  [new]
JAVARookie
Member

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

Так пока что нету никаких запросов. Базу я импортнул в MS SQL из FoxPro. Теперь сижу и думаю, как ее разбивать, что б потом было удобнее с ней работать.
27 ноя 13, 18:13    [15200888]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по быстродействию  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
JAVARookie
Так пока что нету никаких запросов. Базу я импортнул в MS SQL из FoxPro. Теперь сижу и думаю, как ее разбивать, что б потом было удобнее с ней работать.


При таких небольших количествах я бы не стал ничего разбивать для начала. При этом все заказы положил в одну таблицу. И, вот уже, когда будут запросы, созданы необходимые индексы и это будет неудовлетворительно медленно работать, то можно будет подумать о секционировании данных.
27 ноя 13, 18:17    [15200918]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по быстродействию  [new]
JAVARookie
Member

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

Спасибо большое. Буду пробовать.
27 ноя 13, 18:20    [15200948]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить