2009-07-17 50 views
0

我必須設計一個數據庫來存儲日誌數據,但我以前沒有經驗。我的表格包含大約19列(每行大約500字節),每天增長到30,000個新行。我的應用程序必須能夠有效地再次查詢此表。如何設計這個數據庫?

我使用的是SQL Server 2005中

我如何設計這個數據庫?

編輯:我想要存儲的數據包含很多類型:datetime,string,short和int。 NULL單元格大約佔總數的25%:)

+6

如果您需要可靠的建議,您應該添加更多關於數據的詳細信息。 – CodeFusionMobile 2009-07-17 15:48:58

回答

0

好吧,考慮到您提供的所有描述,您確實可以確保數據正常化,並且您的19列不會導致「稀疏」表(這意味着大量的這些列是空的)。

如果你想添加更多的數據(你現有的模式和一些示例數據,也許),那麼我可以提供更具體的建議。

0

在您要查詢的每一列上拋出一個索引。

大量的測試數據和執行計劃(與查詢分析器)在這裏是你的朋友。

+1

我真的在等這個。我不是說,「不這樣做」,但每天增加30K條記錄意味着不需要的索引可能會對性能產生負面影響。所以你需要強調「你會被問到」。在你使用它一段時間之前,你並不知道這一點。 **個人資料**首先。 – 2009-07-17 16:09:37

0

除了對稀疏表格的評論之外,您應該在您希望查詢的列索引表格。

或者,您可以使用分析器對其進行測試,並根據實際使用情況瞭解分析器在索引方面的建議。

0

一些優化技術,你可以做:基於最有可能的查找標準

  1. 集羣您的數據(例如聚集每一行的創建日期,時間會讓這種性質非常快速的查找窗口的主鍵)。
  2. 假設一次只寫入一行(不是批處理)並且每行都被插入但從未更新過,則可以編寫所有選擇語句以使用「with(NOLOCK)」選項。如果您完全繞過鎖定系統,您將擁有多個閱讀器,這將提供巨大的性能提升。考慮到表格的結構,讀取無效數據的風險大大降低。

如果你能發佈你的表格定義,我可能會提供更多的建議。

1

但是,你會做查找,日誌表幾乎肯定會有一個時間戳列。您需要首先在該時間戳上進行羣集以保持插入效率。這可能意味着也總是將查詢限制在特定的日期範圍內,因此聚集索引的選擇性很好。

您還需要索引來查詢最常查詢的字段,但不要在此處跳過槍。您可以稍後添加索引。 簡介首先讓你知道你真正需要的索引。在包含大量插入的表格中,不需要的索引可能會損害您的性能。