У меня есть следующая таблица в SQL Server:
CREATE TABLE [dbo].[Users](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Email] [varchar](128) NOT NULL,
[CreatedAt] [datetime] NOT NULL,
[SourceId] [int] NOT NULL
PRIMARY KEY CLUSTERED
(
[Id] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
У этой таблицы большой потенциал. Наиболее частые запросы, выполняемые в этой таблице, будут следующими:
SELECT * FROM Users WHERE Email = 'some@email.com'
SELECT * FROM Users WHERE Email = 'some@email.com' AND SourceId = some integer
SELECT * FROM Users WHERE CreatedAt BETWEEN '2011-10-01' AND '2011-10-30'
SELECT * FROM Users WHERE CreatedAt BETWEEN '2011-10-01' AND '2011-10-30' AND SourceId = some integer
В настоящее время я настроил следующие индексы:
CREATE INDEX IX_Users_Email_SourceId ON Users (Email, SourceId)
CREATE INDEX IX_Users_CreatedAt ON Users (CreatedAt)
CREATE INDEX IX_Users_SourceId ON Users (SourceId)
Достаточно ли этих индексов для перечисленных выше типов запросов? Должен ли я установить ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON в OFF, если это будет сильно запрашиваемая таблица? Я немного запутался в том, как правильно настроить индексы.