2013-01-17 51 views
1

我想知道什麼會更高效,將大量數據存儲在一個或多個表中。 假設我們想存儲不同地形模型的所有垂直線。SQL Server大量數據在一個或多個表中

首先解決 - 在傳統的方式,我們可以創建兩個表: 表地形(ID,名稱,描述)和 表頂點(terrainId,X,Y,Z)。

然後,所有地形的頂點都存儲在一個表格(頂點表格)中 - 此表格可能非常大(數億個頂點)。

第二種解決方案 - 爲每組頂點創建一個表。 (Vertex-For-Terrein1,x,y,z), Table Vertex-For-Terrein2(x,y,z), ..., Table Vertex-For-Terreinn(x,y,z)。

在第二種方式中,頂點表不存儲關於地形的信息(該信息在表名稱中處理,例如表頂點對於Terrein1)。

什麼會更有效率或有更好的表現?

+1

你真的想要一個包含數億個頂點表的數據庫嗎?這將是一個行政噩夢,如果你問我,會導致非常混亂的查詢。或者我理解你錯了嗎? – SchmitzIT

+0

Vertex-For-Terrein1包含地形1的所有頂點,Vertex-For-Terrein2包含地形2的所有頂點等等(這是我的文章中的第二個解決方案) – 10gler

+0

您有多少地形?這一數量可能在未來發生變化,還是完全是靜態的? – SchmitzIT

回答

1

第一個解決方案。在terrainId上索引Vertex表。

第二種解決方案是使數據難以維護的反規範化。如果您的要求足夠有限,第二種解決方案更適合您,則可能不需要RDBMS系統。

+0

當然我理解這個問題(第二個解決方案是反規範化)。現在我有一個terrainId(第一個解決方案)的索引。我想知道是否第二個解決方案,即使它是一個反規範化可能會更有效率。 – 10gler

+0

好吧,如果您忽略了識別正確表格的任務,那麼第二種解決方案對於讀取特定地形的頂點更有效。它避免了索引查找,但這並不是特別昂貴。當你執行跨越地形的任何操作時,第二次降解反火。如果您不需要這樣的操作,您是否需要將數據存儲在關係數據庫中? – Jodrell

+0

將會有兩個主要操作:讀取和修改指定地形的頂點。 – 10gler

1

我會用第一個解決方案,你可能要考慮受地形ID到每一個人的地形管理但又具有標準化設計的靈活性的功能分區你的表...

+0

我認爲第一個解決方案是更好的+數據分區。謝謝beny23! – 10gler

+0

假設您擁有合適的SQL Server版本,分區就很有意義。 – Jodrell

+0

這裏是對分區的很好的描述: http://msdn.microsoft.com/en-us/library/ms345146%28v=sql.90%29.aspx – 10gler

0

這取決於你將如何查詢這些數據。可能每個頂點只能作爲varchar(max)存儲在Vertext表中。

相關問題