SQL Индексирование таблицы сервера, когда в запросе есть группы по группам и по заказам - PullRequest
0 голосов
/ 06 апреля 2020

Были бы некоторые очевидные индексы, которые должны быть в таблице ниже Users, которые оптимизировали бы для запроса ниже?

Я вижу потребность в индексах, но не уверен, как объединить индексы будет GROUP BY и ORDER BY включены.

Я вижу следующие столбцы:

  1. Status
  2. CreatedDate
  3. Region, LocationId

Ниже приведен запрос:

SELECT
  u.UserId,
  u.LocationId,
  others.ArchiveCount
FROM Users u
  OUTER APPLY (
    SELECT TOP 1
      CASE WHEN u2.Status = 'ARCHIVED' THEN
        1
      ELSE 
        0
      END as ArchiveCount
    FROM Users u2
    WHERE u2.UserId = u.UserId
    ORDER BY u2.CreatedDate desc
  ) others
GROUP BY u.RegionId, u.LocationId, others.ArchiveCount
ORDER BY u.RegionId, u.LocationId, others.ArchiveCount

1 Ответ

1 голос
/ 07 апреля 2020

Вы можете попробовать индекс покрытия (кухонная раковина):

CREATE INDEX IX_CoveringIndex1 ON Users (UserId)
INCLUDE (
    RegionId
    , LocationId
    , CreatedDate
    , [Status]
    )
GO
...