2009-12-29 78 views
1

我有一個SQL表結構如下:修身長,但SQL Server 2005的表

Code1 - int 
Code2 - int 
Val1 - real 
Val2 - real 
Val3 - real 

只有一個索引(clustered)爲代碼1是第一個索引列和代碼2是第二個。單個記錄的大小是20字節。

我需要能夠存儲大約150,000,000條記錄,最大的選擇操作將在500,000條記錄上。我認爲桌子的尺寸大約爲3GB

我想知道這種設計是否可行,或者在處理這樣一個大桌子時可能會出現「無法解釋的」問題或減速。

+2

我沒有看到id字段。你會使用(code1,code2)作爲主鍵嗎? (code1,code2)是唯一的嗎? – 2009-12-29 08:21:09

+4

你會在桌子上進行什麼樣的查詢?這確實決定了需要編制索引的內容。 – 2009-12-29 08:21:35

回答

0

有一個關於SQL的性能和大表一個非常完整的問題:Very large tables in SQL Server

+1

150 mio。在SQL Server中並沒有真正的「非常大」...... – 2009-12-29 08:25:45

+0

+1 marc_s,但是不是一個好的開始? – 2009-12-29 08:27:45

1

基本上,擁有150萬行的表是沒有用於SQL Server - 甚至不會打破一個真正的汗水:-)

關鍵點是:你如何訪問數據?你有什麼樣的疑問?例如。如果您的查詢只有「col2」列的WHERE子句,那麼您在(col1,col2)上沒有使用聚簇索引的良好設置。

另外:數據如何分佈在你的領域?哪些是有選擇性的,哪些更均勻?如果col1或col2具有高度選擇性(例如,單個值選擇的數據顯着少於2%),則儘可能使用該字段進行選擇。對可能有兩個,三個不同值的「性別」字段進行索引不會真的有所幫助,因爲任何使用該字段作爲WHERE子句的選擇將始終返回太多數據以使其無效。

+0

每個查詢在代碼1和代碼2上都有一個WHERE。 code1和code2是主鍵。我正在尋找每天添加約200,000條記錄。 只有一種類型的查詢在此表上執行,代碼1上的範圍和代碼2上的範圍。 – Gilad 2009-12-29 08:36:26

+0

以及code1和code2如何選擇?例如。給定code1的值,總數據的百分之幾被選中? – 2009-12-29 08:39:53

+1

吉拉德 - marc_s詢問有關col1和col2的選擇性的原因是因爲它會在首先放置哪個領域方面發揮作用。如果col2更具選擇性(意思是說,其中有更多獨特的數據),那麼它應該首先放置在聚集索引中。 – 2009-12-29 11:18:36