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

Откуда:
Сообщений: 517
День добрый!
Имеется определённая модель базы данных используемая для отчётов.
База обновляется инкрементально каждые две минуты.
Речь идет о продаже билетов.
Модель примерно такая:
Таблица транзакций DimTransactions, которая содержит данные о продаже: время,код клиента-clientGuid, код кассы-salepointGuid, код концерта-eventGuid и т.п.
Т.е. клиент Х купил 2 взрослых билета, один детский и шоколадку, то это одна транзакция.
Таблица фактов FactItems, в ней находятся конкретно проданные предметы, т.е. в нашем случае 4 строки: 2 взрослых билета,один детский,одна шоколада.Поле Type в этой таблице указывает на тип предмета: 1-билеты, 2- абонементы,3- еда,4-аксесуары...Соответственно у всех 4 строк общее поле TransactionGuid.
Ну и существует множество таблиц Dim.
У всех таблиц есть LocalId int(используется для синхронизации с оперативной базой), но связаны таблицы между собой исключительно через GuidId.
Вопрос такой,при такой модели будет ли верным построение кластерного индекса по LocalId, который int, не кластерный индекс и первичный ключ по полям GuidId в таблицах Dim, т.е. в таблице DimClients первичный ключ и не кластерный индекс по clientGuid и т.п. И кластерный индекс по полю 'Время продажи' в таблице DimTransactions.
Большинство отчётов требуют данные за определенный промежуток времени.
Или же рассмотреть другую модель индексов?
Спасибо!
Речь идёт о миллионах строк в фактах и сотнях тысяч транзакций,таблицы обновляются часто, в основном данные добавляются,изменения существующих строк практически нет.
24 дек 14, 08:39    [17043564]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз разобраться с индексами.  [new]
aleks2
Guest
abrashka
Большинство отчётов требуют данные за определенный промежуток времени.


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

ЗЫ. А вопще, сферический конь в вакууме.
24 дек 14, 08:50    [17043601]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз разобраться с индексами.  [new]
abrashka
Member

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

Ну дата есть только в таблице транзакций. В остальных таблицах интересует какой индекс строить по полям Guid.
24 дек 14, 08:55    [17043614]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз разобраться с индексами.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
abrashka
И кластерный индекс по полю 'Время продажи' в таблице DimTransactions.
Большинство отчётов требуют данные за определенный промежуток времени.
Или же рассмотреть другую модель индексов?
Какие отчёты?
По всем данным за промежуток времени, или по одному клиенту, кассе и т.п.?
abrashka
будет ли верным построение кластерного индекса по LocalId
Уж этого точно не надо, раз поле просто декоративное.

Кластерный индекс нужно делать либо по условию диапазона выборки, либо по порядку добавления данных.
А вообще, конечно, нужно смотреть на запросы, детально.
24 дек 14, 08:56    [17043624]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз разобраться с индексами.  [new]
abrashka
Member

Откуда:
Сообщений: 517
alexeyvg,
Спасибо!
Отчеты разные,и по конкретному клиенту,кассе,концерту и по всем продажам за какой-то промежуток времени.
Localid не совсем декоративный, а таки по порядку добавления данных.
На сколько я понимаю,кластерный индекс по полям guid нет никакого смысла делать?
24 дек 14, 09:04    [17043659]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз разобраться с индексами.  [new]
aleks2
Guest
abrashka
alexeyvg,
Спасибо!
Отчеты разные,и по конкретному клиенту,кассе,концерту и по всем продажам за какой-то промежуток времени.
Localid не совсем декоративный, а таки по порядку добавления данных.
На сколько я понимаю,кластерный индекс по полям guid нет никакого смысла делать?

Нихрена ты не понимаешь.
24 дек 14, 09:55    [17043920]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз разобраться с индексами.  [new]
abrashka
Member

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

Ну в принципе да, именно по этой причине и спрашиваю...
24 дек 14, 10:20    [17044126]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз разобраться с индексами.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
abrashka
Localid не совсем декоративный, а таки по порядку добавления данных.
ИМеется в виду, что он не используется, а только "есть", по порядку он или нет, неважно.
abrashka
На сколько я понимаю, кластерный индекс по полям guid нет никакого смысла делать?
Почему, для выборке по ИД это хорошо, том чиле при выбрке по связанным join-ом записей.
Для вставки плохо, будет расщепление страниц, но тут может помочь NEWSEQUENTIALID
24 дек 14, 10:58    [17044407]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз разобраться с индексами.  [new]
abrashka
Member

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

Спасибо!
Коды не генерируются ,а "приходят" из оперативной базы,поэтому newsequentalid не пойдёт.
Т.е. в принципе в моём случае можно создать первичный ключ и некластерый индекс по guidid, а в таблицах, где есть даты создать кластерный индекс?
Т.е. это нормально,если большинство таблиц не будут иметь кластерный индекс?
Ещё раз повторюсь,речь идёт о базовой модели,понятно,что в зависимости от запросов будут добавляться индексы по необходимости.
24 дек 14, 11:18    [17044508]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз разобраться с индексами.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Кластерный не обязан быть первичным ключом и не обязан быть уникальным. Основное требование - как можно меньшая длина ключа и как можно меньшая повторяемость значений, причем новые значения в середину сортировки не должны добавляться, только в конец.
Если данные вставляются вперемешку, то стоит подумать об организации таблицы в виде кучи.
24 дек 14, 12:00    [17044835]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз разобраться с индексами.  [new]
abrashka
Member

Откуда:
Сообщений: 517
Владислав Колосов,

Спасибо!
На счет дат я понял. Планирую добавить поле в таблице транзакций в виде yyyymmdd и сделать кластерный индекс по нему.
На счет таблицы айтемов, совсем не обязательно,чтоб в таблице был кластерный индекс? Достаточно не кластерный по guidid?
24 дек 14, 12:44    [17045166]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить