2014-03-26 20 views
1

我有一個2億條記錄的靜態人口統計表,包含230列。沒有索引,也沒有任何獨特的單獨列。
此表具有ZIP (varchar(5))STREET NUMBER (varchar(10))列,實際上這些列將用於此表中的所有連接。非常大的靜態表,其中沒有Where子句

將會有從不是Where子句,因爲此表用作針對單個客戶端表的「匹配」平臺。客戶表格可以是從20K到300萬行的任何地方,並且也將具有ZIP和街道號碼列。所以至少我的加入將包括:ZIP = ZIPSTREET_NO = STREET_NO。還會有其他連接條件,但它們將使用模糊匹配等功能。 SELECT條款將是動態的,並將包含任意數量的列,因此覆蓋索引似乎不實際。

我可以自由地在大量的表上添加索引。到目前爲止,我添加了ID身份主鍵,給我一個聚集索引。然後,我在(ZIP,STREET NO)上添加了非聚集索引。

但是,我不確定代理鍵上的聚簇索引是否必要,因爲這是靜態數據。

因爲永遠不會有Where子句,這是一個JOIN問題,我可能會更好地使羣集索引(ZIP,STREET NO)?每當我運行一個查詢並且認爲這可能是可疑的時,我在當前羣集ID列上看到很多書籤查找(佔執行計劃執行時間的80%)。

感謝您的回覆。

回答

0

在決定是否應該有聚簇索引或非聚簇索引之前,請測試將訪問該表的所有可能類型的查詢。您可能還需要考慮在外鍵列和用於搜索參數以及分組和排序的列上構建索引。在測試可能的索引時,確保包含所有數據修改操作。

因此運行您的查詢並讓SQL Server Optimizer執行它的工作!他會告訴你你需要做什麼(在哪裏創建你的索引和什麼類型)來加快你的查詢速度。