@zhaar

Какой индекс создать для таблицы?

Есть табличка, которая содержит в себе информацию о магазинах - кому они подчинены, в каком регионе находятся, где хранятся и пр. Список столбцов такой:

[DivisionNodeName] varchar(100)
,[DSMid] int non-unique
,[DSMname]
,[TSMNodeName]
,[TSMid] int non-unique
,[TSMname]
,[SVNodeName]
,[SVid] int non-unique
,[SVname]
,[TPNodeName]
,[TPid] int non-unique
,[TPname]
,[TTfid] int, unique
,[TTexid]
,[TTname]
,[TTowner] int

Собственно вопрос - куда и какие индексы добавлять по тем полям, что я отметил типом данных.

Поле TTfid точно делать (уникальным, кластеризованным?), причем эта цифра частично связана со следующим полем. Код точки начинается с номера сервера из столбца TTowner, т.е. 20000001 на сервере 2, 30000435 на сервере 3 и т.д.
Сейчас индекс есть только на нем:

CREATE CLUSTERED INDEX [IX_ttfid] ON [dbo].[DMS_RU_TerritoryHierarchy]
([TTfid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

Поле TTowner содержит сервер, есть смысл объединять с прошлым? Т.к. это должно упростить поиск страниц, какой индекс из него делать? Если да, то какой ставить?

dsmid\tsmid\svid - это коды сотрудников, они повторяются, есть ли смысл пытаться повестить индекс на них? Что-то кажется что нет, даже если захочется искать по ним... хотя?

region - есть ли смысл вешать туда индекс? Если да, то какой? По факту это должно облегчить поиск точек, которые относятся к конкретному региону, не затрагивая сервера.

Всего в таблице порядка 400к строк (немного, да), перед записью индекс сейчас снимается, таблица чистится и снова загружаются данные. индекс ставится. И так каждый день.
В последствии к этой таблице обращаются другие запросы, которые, например, подтягивают вышестоящего сотрудника для точки для порядка 30-40 миллионов документов (join идет по полям: TTfid, TPid и TTowner)
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
unfilled
@unfilled
Кластерный индекс лучше объявить уникальным (раз вы пишете, что TTfid уникальное. Оптимизатору всегда лучше предоставлять максимум информации.
Что касается индексов по конкретным столбцам - нужно видеть, какие конкретно запросы вы хотите оптимизировать. Без этого - гадание на кофейной гуще. Для запроса, где "join идет по полям: TTfid, TPid и TTowner" уникальный кластерный индекс по TTfld - то что доктор прописал.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
Минимум: постройте план выполнения запроса. Там будут подсказки, какой индекс добавить. Если этих подсказок нет, значит оптимизатор с помощью статистики справился сам.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы