РЕДАКТИРОВАТЬ: Я добавил столбец «Slug» для решения проблем производительности при выборе конкретной записи.
В моей таблице есть следующие столбцы.
Id Int - Primary key (identity, clustered by default)
Slug varchar(100)
...
EntryDate DateTime
В большинстве случаев я упорядочиваю оператор select по EntryDate, как показано ниже.
Select T.Id, T.Slug, ..., T.EntryDate
From (
Select Id, Slug, ..., EntryDate,
Row_Number() Over (Order By EntryDate Desc, Id Desc) AS RowNum
From TableName
Where ...
) As T
Where T.RowNum Between ... And ...
Я заказываю его по EntryDate и Id на случай дублирования EntryDate.
Когда я выбираю запись A, я делаю следующее.
Select Id, Slug, ..., EntryDate
From TableName
Where Slug = @slug And Year(EntryDate) = @entryYear
And Month(EntryDate) = @entryMonth
У меня есть уникальный ключ Slug & EntryDate.
Каким был бы разумный выбор ключей и индексов в моей ситуации? Возможно, у меня проблемы с производительностью, потому что я упорядочиваю по столбцу, который не индексируется в кластере.
Должен ли я установить Id в качестве некластеризованного первичного ключа и EntryDate в качестве кластеризованного индекса?
Я ценю всю вашу помощь. Спасибо.
EDIT:
Я не пытался добавить некластеризованный индекс в EntryDate. Данные вставляются из серверной части, поэтому производительность для вставки не имеет большого значения для меня. Кроме того, EntryDate не всегда дата, когда он вставлен. Это может быть прошедшее свидание. Внутренний пользователь выбирает дату.