나와있는 쿼리를 제공 I 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 = '[email protected]'
SELECT * FROM Users WHERE Email = '[email protected]' 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로 설정해야합니까? 인덱스를 올바르게 설정하는 방법에 대해 다소 혼란 스럽습니다.
감사합니다. KM. 행과 페이지 잠금을 해제해야합니까, 아니면 나쁜 생각입니까? SourceId는 그다지 선택적이 아닙니다. 많은 INSERTS가있을 것입니다 (그러나 많은 UPDATES는 아닙니다). – Thomas
INSERT/UPDATE/DELETE 빈도와 트랜잭션 길이에 따라 잠금에 대해 걱정할 필요가 있습니다. 이 데이터를 주로'선택 '하고 느린 트랜잭션을 변경하지 않는 경우 문제가 발생할 때까지는 걱정하지 않겠습니다. –