2013-01-17 23 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表中。

相关问题