2011-12-17 48 views
0

我有一個只有400-500行的表,但這個表經常被訪問,所以我想知道是否應該在其中的一列上添加一個非聚集索引來查看任何改進?將非聚簇索引添加到少於1000行但頻繁訪問的表中會提高性能?

該表始終保持相同的數據,很少更新。

這裏的表

CREATE TABLE [dbo].[tbl_TimeZones](
    [country] [char](2) NOT NULL, 
    [region] [char](2) NULL, 
    [timezone] [varchar](50) NOT NULL 
) ON [PRIMARY] 

與此簇索引結構:

CREATE CLUSTERED INDEX [IX_tbl_TimeZones] ON [dbo].[tbl_TimeZones] 
(
    [country] ASC, 
    [region] ASC, 
    [timezone] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
GO 

本表不具有主鍵,因爲該地區的列可能是所以這就是爲什麼我還沒有用過鑰匙。

所以我想在列時區上添加一個非集羣索引,以提高它的性能。

回答

1

簡答:索引可能會提高你的表現。

較長的答案。 即使只有那麼多的記錄,您也可以看到使用精心選擇的索引改進了查詢。假設這個表在連接中使用,您可以看到通過該表連接的查詢計劃中的更改(改進),這可能會給您帶來比您預期的更大的好處。

你似乎給人的印象是你期望索引「一個」列。索引一列可能不是最佳解決方案。 「覆蓋」指數通常會是一個更好的解決方案(谷歌的「覆蓋指數」)。

現在,我已經說了所有這些,我懷疑最好的性能可能來自如何定義聚集索引。您沒有在此表上指明聚集索引的性質,也沒有說明數據的使用。但是,如果查詢幾乎總是以相同的方式訪問表(例如,WHERE和JOIN子句總是引用相同的列),那麼您可能會發現更改聚集索引可以獲得最大的改進。另外,選擇索引的藝術的一部分涉及平衡查詢性能與插入/更新性能。如果數據沒有變化,你就沒有這種挑戰。在閱讀一般索引調整建議時請記住這一點。

底線:我懷疑在WHERE和JOIN子句中使用的列上的聚集索引是答案。考慮列順序問題。選擇性很重要。

+0

感謝您的迴應我已經添加了一個真正的示例表以獲得更好的方法。 – enb141 2011-12-17 03:26:55

相關問題