EDIT: Я добавил столбец «Slug» для решения проблем производительности при выборе конкретной записи.Умный выбор для первичного ключа и кластерного индекса в таблице в SQL 2005 для повышения производительности при выборе одной записи или нескольких записей
У меня есть следующие столбцы в моем столе.
Id Int - Primary key (identity, clustered by default)
Slug varchar(100)
...
EntryDate DateTime
В большинстве случаев я заказываю выписку с помощью 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 в случае наличия дубликатов записей.
Когда я выбираю запись, я делаю следующее.
Select Id, Slug, ..., EntryDate
From TableName
Where Slug = @slug And Year(EntryDate) = @entryYear
And Month(EntryDate) = @entryMonth
У меня есть уникальный ключ Slug & EntryDate.
Что было бы разумным выбором ключей и индексов в моей ситуации? Я сталкиваюсь с проблемами производительности, вероятно, потому, что я заказываю столбцом, который не кластеризован индексироваться.
Должен ли я установить Id как некластеризованный первичный ключ и EntryDate в качестве кластерного индекса?
Я ценю всю вашу помощь. Благодарю.
EDIT:
Я не пытался добавить некластеризованной индекс на EntryDate. Данные, вставленные из back-end, поэтому производительность для вставки для меня не большая. Кроме того, EntryDate не всегда является датой ее вставки. Это может быть прошлая дата. Конечный пользователь выбирает дату.
Нет, я не пробовал добавлять некластеризованный индекс в EntryDate. Данные, вставленные из back-end, поэтому производительность для вставки для меня не большая. Кроме того, EntryDate не всегда является датой ее вставки. Это может быть прошлая дата. Конечный пользователь выбирает дату. –