2014-02-14 45 views
0

什么索引我有一个简单的表:SQL Server创建

CREATE TABLE DocModHistory 
    [ID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL, 
    [DocID] [int] NOT NULL, 
    [BranchID] [int] NOT NULL, 
    [UserID] [int] NOT NULL, 
    [InsDate] [datetime] NOT NULL, 
    [Type] [int] NOT NULL, 
CONSTRAINT [PK_DocModHistory] 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 dh.BranchID, MAX(dh.ID) as MaxID FROM DocModHistory dh WHERE dh.UserID = @p_UserID GROUP BY dh.BranchID 

SELECT dh.DocID, MAX(dh.ID) as MaxID FROM DocModHistory dh WHERE dh.UserID = @p_UserID GROUP BY dh.DocID 

你能告诉我请什么我应该创建索引? 我应该为UserID,BranchID,DocID创建单独的索引,还是我需要多列索引?

谢谢!

回答

1

与包含的列BranchIDID和创建UserID指数DocID

因此,像

CREATE INDEX IX_UserID ON DocModHistory (UserID) INCLUDE (BranchID, ID ,DocID); 
+0

所以没有必要创建两个索引? SQL Server可以使用您建议的两个查询具有相同性能的索引吗?谢谢! – Zsolt

+1

是的,它可以在两个用户ID都被过滤的情况下使用这两个查询,然后包含的列将被用作查询的一部分,而不是密钥查找。 –