我正在將相當多的數據導入SQL Server數據庫。源數據來源於PgSql(包括表格定義),我通過一些相當簡單的正則表達式轉換爲TSql。這會創建沒有主鍵的表。是否添加主鍵導致重構底層數據
據我所知,缺少主鍵/集羣索引意味着數據存儲在堆中。
一旦導入完成後,我加的PK如下:
ALTER TABLE someTable ADD CONSTRAINT PK_someTable PRIMARY KEY (id);
(注意缺乏CLUSTERED
關鍵字)。現在發生了什麼?還是一堆?主鍵查找有什麼影響?這與添加標準索引有什麼不同嗎?
現在,而不是說我加的PK如下:
ALTER TABLE someTable ADD CONSTRAINT PK_someTable PRIMARY KEY CLUSTERED (id);
我認爲這已經完全重構表到基於行的結構與PK,但不太理想的插入特性更加有效的查找。
我的假設是否正確?
如果我的導入按PK順序插入數據,首先省略PK有沒有好處?
你想插入行,然後你要添加的PK? –
我也可以做,但考慮到數據量,我寧願瞭解發生的情況,而不是花5-8小時測試不同的情況。我可以在鍵之前或之後添加鍵,但插入**將以鍵盤順序發生。 – spender
如果目標表是HEAP,INSERT *應該更快。但是具有PK(非羣集)的HEAP表的總體(插入,更新,刪除,選擇)性能應該比羣集表的性能差。看看這個[SQL Server最佳實踐文章](http://technet.microsoft.com/en-us/library/cc917672.aspx)。如果你導入大量的數據,你應該看看[table partitioning(SQL2005 +)](http://msdn.microsoft.com/en-US/library/ms345146%28v=SQL.90%29#sql2k5parti_topic24 )。 –