В таблице у меня есть столбец Date
, и я хочу группировать по месяцам и годам.Композитный индекс или отдельный индекс?
Я создал две колонки: DateMonth
и DateYear
и я наполнил их с соответствующим месяцем и лет:
UPDATE t SET DateMonth = DATEPART(month, Date), DateYear = DATEPART(year, Date)
Таким образом, запрос GroupBy обыкновение использовать DATEPART()
(SQL функции не могут воспользоваться индексов).
GroupBy запрос следующим образом:
SELECT DateMonth, DateYear, COUNT(*) AS RowsCount FROM t GROUP BY DateMonth, DateYear
Учитывая, что информация, какой тип индекса даст лучшую производительность в проницаемой запроса GroupBy?
Каждый столбец индексируются:
CREATE INDEX IX_DateMonth ON t(DateMonth)
CREATE INDEX IX_DateYear ON t(DateYear)
или один индекс, который охватывает два столбца:
CREATE INDEX IX_DateMonth_DateYear ON t(DateMonth, DateYear)