2010-05-11 43 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

相關問題