2009-10-01 69 views
0

我在SQL Server 2008中有一個支持各種應用程序的數據庫。我現在開始開發一個新的應用程序,並從該數據庫開始,我需要適合一個表的數據(雖然有一些複製)。真正快速的單表數據庫的策略是什麼?

我想要的數據可能會被提取到6列的視圖(一些內部聯接)。我正在開發一個Web應用程序,它必須能夠快速瀏覽數據(大約600萬條記錄)。因此,我想知道是否建議查詢SQL Server視圖或部署由Lucene或類似機制索引的新的可更新數據庫(BerkeleyDB?)

先謝謝了!

回答

2

意見不作任何訪問您的數據更快的有效的例子,他們只是使編寫查詢更容易。這意味着從您的視圖中選擇數據將等同於組成視圖的少數聯接,並且在涉及600萬條記錄的表上聯接將需要一段時間。

問題是,你想加快什麼?如果您希望從複雜數據集中快速選擇,可以嘗試構建包含所需數據的實際表(而不是視圖),並按預設間隔從主表中更新這些表。

如果您的數據將不斷修改,並且您需要快速更新,並且選擇始終反映最新數據,則可能需要優化表結構。看看你是否可以取消連接。這可能是以複製數據爲代價的,這意味着您需要大量使用事務。

+0

呃...數據每月更新...我只需要做出選擇... 所以你認爲我應該創建一組新的表(2或3)與所需的數據並更新它們主數據庫何時更新? – 2009-10-01 10:32:13

+1

一般正確,但請參閱leonm對索引voews的評論 – Mark 2009-10-01 10:53:04

+0

@Pedrolopes,揮霍並做5或6!從你的問題到底有多少人能推薦你應該有多少桌?你給零的細節 – 2009-10-01 12:19:52

0

您是否熟悉Boyce-Codd Normal Forms

如果您想保留您當前的基礎架構,想將您的數據限制在單個表中並關注性能。我強烈建議你在表中添加額外的列,並在這些列中存儲非標準化的數據。

例如:

假設您有一個表,people。每個人有一個manager_id鏈接到manager在同一個表中的另一個person。您可以爲名爲employees_countmanager添加一列,其中存儲了一個跟蹤該人數的人數的計數器manager

這是一個簡單的,但非規格化數據

0

這可能是一個難以回答的問題,不知道確切的數據結構。 SQL Server中的Indexed views對此很有幫助,並且可以很好地滿足您的性能標準。

此時建議針對視圖運行測試(可能是JMeter jdbc負載測試)。使用Lucene或BerkeleyDB創建附加索引之前,您可以通過相對較少的努力確定最簡單解決方案的可行性。

+0

這是一個過度標準化的數據結構...它有6個表,所以即使是最小的操作,我需要進行2或3個連接...並且它有大約3000萬條目,我只想要一個子集(約600萬)那些...... 因此,創建一個新的表格並測試其性能? SQL Server分析服務給了我一些很好的結果... – 2009-10-01 10:34:44

+0

我最初會使用新的表/視圖,如果真的有必要,只能切換到另一種方法。進行大量測試以查看性能是否滿足您的需求,但聽起來如果您沒有問題。 保留一個額外的Lucene索引有它自己的一套問題。您可以保留的東西越簡單,就越有可能正確縮放。 – leonm 2009-10-01 10:44:52

+0

Pedrolopes幾乎沒有超標準化的結構。我經常不得不用更多的連接來查詢更大的表,並且仍然獲得良好的性能。如果您已正確編制索引,並且有600萬條記錄是SQL Server的一個小數據集,那麼加入兩個或三個表格就沒有任何內在的錯誤。您應該使用標準查詢輕鬆獲得良好的性能。視圖可能會損害性能,尤其是在視圖之上堆疊視圖時。索引視圖可以提供幫助,但您只能索引不引用其他視圖的視圖。在你走下這條道路之前,請長時間思考! – HLGEM 2009-10-01 14:38:14