2010-03-24 52 views
2

我目前正在使用MS SQL Server 2008,但我不確定它是否是此特定任務的最佳系統。什麼是最適合我需求的數據庫?

我有一個表,如下所示:

PK_ptA PK_ptB DateInserted LookupColA LookupColB ... LookupColF DataCol (ntext) 

共同詢問是

SELECT TOP(1000000) DataCol FROM table 
WHERE LookupColA=x AND LookupColD=y AND LookupColE=z 
ORDER BY DateInserted DESC 

表有大約十億行有500萬,每天插入。

我與SQL Server的主要問題是,它不是太容易碎片或分散的數據文件。另外,出口似乎最大爲每秒1000行(約1MB/s),看起來非常慢。

我的另一個問題是,與SQL Server,如果我想添加一個新的LookupCol日誌文件增長巨大需要大量的很少使用的自由空間。

這個問題有沒有明顯的更好的解決方案?

+0

您能否介紹一下更多關於您正在存儲的數據以及您想如何查詢的信息? – 2010-03-24 12:02:54

+0

ar,我正在存儲1k個文本文件(作爲NTEXT存儲在DataCol中)。我一般需要一次檢索幾百萬個文件,並將它們放在磁盤上,合併爲1MB的文本文件。 我需要能夠根據LookupCols檢索它們並按日期時間列排序。 – 2010-03-24 12:41:55

回答

3

您遇到問題,它不是SQL Server。讓我也忽略你似乎是一個糟糕的桌子設計。

  • 傳播數據文件其實很簡單。以後重組並不那麼容易,但也是可行的。你的表格,文件組和文件格式如何?
  • 導出1mb每秒是一個笑話。認真。我已經在幾分鐘內處理了1.5億行文件 - 每分鐘可以運行超過60,000行。有些東西嚇壞了。臨時空間?你做過性能分析嗎?硬件看起來如何?
  • 沒有什麼可用於日誌使用。基本上像大多數專業數據庫一樣,日誌包含事務期間所有更改的數據庫頁面。添加字段更改 - 所有頁面。

你應該:

  • 重新設計數據庫(使用視圖來保持相同的舊錶的地方,如果你ahve到),所以它不會ahve「LookupColA」等等,但歸(LookupValue,以及由「列」編碼的LookuPTable)。這樣你可以獲得即時的附加字段。這變成了像星型模式這樣的數據倉庫。
  • 做一個性能分析。看起來你有些問題。
  • 肯定的告訴我們,阿布硬件;)

這裏這個問題絕對不是SQL服務器,它關係到壞表的設計和 - 可能 - 嚴重利用的硬件 - 不足。

+0

謝謝TomTom。 Serverwise我正在使用DELL MD3000,配備RAID 5的13 x 15kRPM 300GB硬盤和配備16GB RAM,Windows 2003 x64的 T710,2.66GHz X5550。 整個表數據存儲在RAID陣列中。我沒有拆分文件組。 我不太喜歡你的餐桌設計建議。你能稍微擴大你的建議嗎? – 2010-03-24 12:39:26

+0

RAID 5在更新過程中會變慢 - 寫入操作可能會導致讀取性能下降。對於表建議單獨的答案;)如果你沒有調整你的表,可能是由於其上的非對齊分區(高達40%io性能浪費)而導致很多性能下降。我認爲你遇到了一個IO問題,這部分問題在你身上(例如:壞的安裝,壞的RAID佈局)。 – TomTom 2010-03-24 12:40:52

0

好吧,表設計(單獨的答案)。 Lokup是低音查找表。

因此....

  • LookupTable中
  • PK(INT)
  • TABLETYPE
  • 值 作爲vields

  • ValueTable

  • PK

  • ValueLookupMap噸ValueTable進入

  • PK LookupTable中進入的能

  • PK

所以,基本上,如果你添加一個查找「場」,那麼你只需要創建一套LookupTable中的條目,然後在添加條目ValueLookupMap。

相關問題