2010-12-08 123 views
2

我的數據庫有一個非常大的表,超過20億行3列。 Id(uniqueidentity),Type(int,0-10。0 =最常用,10 =最少使用),數據(1-10MB之間的二進制數據)優化sql server數據庫

有什麼方法可以優化這個數據庫? (主要是選擇查詢)

*注:我以後可能會添加更多的列到這個表(如:位置,日期等)

+0

你使用的是什麼版本?有些想法只是企業版。 – 2010-12-08 23:49:09

+0

2008企業版 – Joanne 2010-12-08 23:51:48

+0

你能提供一些關於如何查詢這些數據的例子嗎?按類型?通過ID? – Joe 2010-12-09 00:11:10

回答

1
  • 添加索引(ES)。確定哪些列是最合適的聚集索引。

  • 決定是否存儲二進制數據的10MB每個(否則小)行中是一個很好用的數據庫的

5

[響應於Remus的評論已更新]假設id柱是聚集索引鍵,並假設通過uniqueidentity你的意思是uniqueidentifier

  • 你需要的uniqueidentifier TY PE?爲什麼?
  • 您考慮了其他替代方案嗎?
  • 您是否使用順序GUID填充數據?

GUID是一個衆所周知的窮人羣集鍵的選擇。對於更詳細的討論參見GUIDs as PRIMARY KEYs and/or the clustering key

但是,一個GUID是不連續的 - 像一個有它的價值在客戶端生成 (使用.NET) 或者由NEWID()函數 產生(在SQL Server中)可能是一個可怕的錯誤 的選擇 - 主要是因爲它在 基表中創建的 碎片,但也是因爲它的大小爲 。這是不必要的寬度(它比基於整數的身份 寬4 - 這可以給你20億(真的,40億)獨特的行)。而且, 如果你需要超過2十億你 總是可以用BIGINT(8字節 INT)去得到2^63-1行

又讀Disk space is cheap...That's not the point!作爲跟進。

除此之外,你需要做的功課,並張貼了這樣一個問題所需的詳細信息:通過一系列確切表和索引的定義,普遍的數據訪問模式(按鍵,過濾排序順序,連接等等等等)。

到目前爲止,您是否做過任何工作以發現問題?如果不是,請從Waits and Queues開始,這是一種經過驗證的方法,可用於識別性能瓶頸。一旦你衡量並找到需要改進的地方,我們可以建議如何改進。