2010-05-11 92 views
1

我仍然是SQL-SERVER2005的学习用户。在这种情况下会创建索引帮助

这里是我的表结构

CREATE TABLE [dbo].[Trn_PostingGroups](
[ControlGroup] [char](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
[PracticeCode] [char](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
[ScanDate] [smalldatetime] NULL, 
[DepositDate] [smalldatetime] NULL, 
[NameOfFile] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
[DepositValue] [decimal](11, 2) NULL, 
[RecordStatus] [char](1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
CONSTRAINT [PK_Trn_PostingGroups_1] PRIMARY KEY CLUSTERED 
(
    [ControlGroup] ASC, 
    [PracticeCode] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

方案1:假设我有这样的查询...

Select * from Trn_PostingGroups where PracticeCode = 'ABC' 
在实践守则

威尔索引seperately帮助我在做我的查询更快??

方案2:上NameOfFile

Select * from Trn_PostingGroups 
where 
    ControlGroup = 12701 
    and PracticeCode = 'ABC' 
    and NameOfFile = 'FileName1' 

威尔索引seperately帮助我让我的查询速度更快?

+0

它将在一定程度上取决于您的数据的选择性 – 2010-05-11 13:16:58

+0

您应该确保的第一件事是您的统计信息是最新的... – 2010-05-11 13:20:29

回答

0

每个查询只能为每个表使用一个索引(除非您考虑自联接或CTE)。如果你有多个可以在同一个查询中的同一个表上使用的数据,那么SQL Server将使用统计信息来确定哪个更适合使用。

在情况1中,如果单独在PracticeCode上创建索引,通常会使用它,只要您有足够的表格扫描成本更高的行并且该列中存在多种值。如果表中只有少数几行,则不会使用索引(仅查看它们会更快)。另外,如果该列中的大多数值相同,则不会使用索引。它不会在这个查询中使用PK,它就像在电话簿中寻找名字一样,不能使用索引,因为它是last +名字。如果您从不在自己的ControlGroup上搜索,则可以考虑将您的PK逆向PracticeCode+ControlGroup

在情况2中,如果您在NameOfFile上有索引,它可能会使用PK并忽略NameOfFile索引。除非你使NameOfFile索引唯一,然后它是一个投票。您可以尝试在ControlGroup + PracticeCode + NameOfFile上创建一个索引(除了您的PK)。如果每个ControlGroup + PracticeCode有多个文件,则可以通过PK索引选择该索引。

+0

对不起。我无法得到你......在第一种情况下,条件是在PKEY的一部分的字段上,结果许多行将被返回......但是在第二种情况下,我给出了PKEY的所有值,所以它会继续只返回一行..但是我再对一列进行检查。我认为这是适当的SQL服务器获取PKEY的数据,并检查一行与提取的行... – 2010-05-11 13:18:41

+0

我完全错过了问题中表定义的'PRIMARY KEY'部分。 – 2010-05-11 13:25:07

+0

@Mitch是怎么回事?自我加入,CTE,当然不是在问题中给出的简单查询中。 – 2010-05-11 13:26:11

1

如果您只在第一个字段(ControlGroup)上进行选择,则它是聚集索引的主要排序,您不需要对其他字段进行索引。

如果您在其他主键字段上选择,则在其他字段中添加单独的索引应该有助于此类选择。

一般来说,您应该对SORTWHERE子句中常用的字段进行索引。这当然是过分简化了。

有关优化(统计和查询分析器)的更多信息,请参阅this

+0

谢谢......方案2的任何帮助。 – 2010-05-11 13:20:13

+0

非常好的链接...谢谢 – 2010-05-11 14:20:39

相关问题