Я новичок в построении индексов и у меня вопрос о передовой практике.
По своей сути у меня есть следующие 3 таблицы:
Таблица A
~ 100 000 строк
Для данного элемента, напримерproduct, некоторая информация о том, что это
ArticleId [int] (PK)
... some static info columns
Таблица B
~ 100 000 * K
строк, где K
будет увеличиваться при обновлении таблицы Bкаждые несколько месяцевСодержит переменные, которые не являются фиксированными, но могут изменять каждую итерацию.
UploadId [int] -- one for each K iterations
ArticleId [int] (FK on table A)
GroupingA [nvarchar](255)
GroupingB [nvarchar](255)
Таблица C
~ 50 миллионов строк, данные о продажах
ArticleId [int] (FK on table A)
Date [date]
Sales [int]
Поскольку таблицы большие, я опасаюсь, что мымогут потребоваться индексы хорошего качества, иначе производительность запросов снизится. Я читал, что не стоит использовать кластеризованные индексы для типов символов.
Одним из основных запросов является объединение B & C и агрегирование данных до уровней GroupingA
& GroupingB
следующим образом:
SELECT
C.[Date],
B.[GroupingA], B.[GroupingB],
SUM(C.Sales) AS Sales
FROM
C
INNER JOIN
B ON C.[ArticleId] = B.[ArticleId]
WHERE
B.Upload.Id = 1 -- example
GROUP BY
C.[Date], B.[GroupingA], B.[GroupingB]
Для таблицы CI сделаноUNIQUE CLUSTERED INDEX ... on (Date, ArticleId)
. Для таблицы BI планировал сделать одну за UNIQUE CLUSTERED INDEX ... on (UploadId, ArticleId)
.
Является ли хорошей идеей поместить кластерный или некластеризованный индекс в B.[GroupingA], B.[GroupingB]
, даже если они являются символами? Они будут интенсивно использоваться в группировках, поэтому я беспокоюсь, что не проиндексировать их, это может быть очень медленным. Должен ли я сдавать их в поиски с их составленными identity()
идентификаторами? Любые идеи или ссылки будут отличными:)
Кроме того, в будущем у нас может появиться больше группировок, например, GroupingC, ... и т. Д. Заранее спасибо!
Моя версия SQL Server:
Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49
Copyright (C) 2017 Microsoft Corporation Express Edition (64-bit)
on Windows 10 Pro 10.0 <X64> (Build 17134: ) (Hypervisor)