在SQL Server中分解HUGE表是否更好?

时间:2011-01-24 23:58:59

标签: sql sql-server performance entity-framework-4

我正在设计一个金融应用程序,可以节省许多证券的报价。 历史数据可以是每个安全性数百和数百万的报价(并且可能存在数百和数千种不同的证券)。

将每个安全性的引用保存在单独的表中是否更好,还是可以使用一个巨大的表?

如果我使用一个表,我需要提供符号+时间的唯一键以防止重复引号,而使用多个表将要求我只使用单列键作为时间列。

谢谢

顺便说一句,我问这个,因为我开始使用Entity Framework,似乎我不能在运行时使用它来创建表而不添加ADO.NET,因此我需要提前知道我需要哪些表(和所以我不能为新证券添加新表格。或者我错了吗?

4 个答案:

答案 0 :(得分:4)

表格可以partitioned超过存储空间,但可能不符合您的利益:

  

虽然分区可以提供很好的功能   好处,它增加了行政   开销和复杂性   实现你的对象,其中   可能更多的是负担而不是收益。   具体来说,您可能不想这样做   分区小表或表   目前符合性能和   维护要求。打折   前面提到的场景使用   分割以减轻负担   移动行和数据 - 你应该   考虑您的方案是否有   决定时这种负担   是否实施分区。

此外,如果您的目标是将数据分成单独的文件组(最终是磁盘组/阵列),您可以使用存储系统实现同样的目标(组中有多个驱动器的SAN LUN,具有许多驱动器的RAID阵列)推动分散负荷。)

如果您的存储空间充足且代码紧张,您的应用程序可以使用一个表格。

答案 1 :(得分:3)

拥有程序生成的表总是一个坏主意。如果你的系统花费太长时间来实现它的目标,也许你应该考虑一个OLAP Cube - 毕竟,它们是为它们设计的。

答案 2 :(得分:1)

对于单个表以及适当选择的索引和约束,您应该没问题。

您可以对表进行分区,但主要用途不是为了提高性能,而是为了管理,因为这样可以删除旧数据并以滚动方式添加新数据分区。除了时间,这可能对你没用;你不太可能按股票代码进行分区 - 我不确定管理分区有什么好处。

我可能会考虑将聚集索引作为自动收报机(可能是一个int代理进入自动收录表或者只是自动收报机)和时间。

在这样一个简单的数据模型中,它将与维度模型无法区分,但如果您想要阅读有关数据仓库性能的维度建模,这可能很有用,特别是使用正交的特征/缺点日期维度和时间维度。如果您的数据是在盘中,则可能需要使用单个日期时间列。

答案 3 :(得分:0)

不要对不同的证券使用不同的表格。请!这最终会给你带来比你解决的问题更多的问题。

如果将安全性设置为聚簇索引的第一列(8字节或更少,请在必要时使用人工int键)并使索引尽可能短,您的性能将会很好。即使引擎必须进行扫描以满足查询,也始终会提供安全性,因此它将对表或索引进行范围扫描。

如果绝对必要,您可以对表格进行分区。在SQL 2008或更高版本中,您还可以创建仅覆盖表中一部分行的filtered indexes

更新不会出现与单独表格不同的问题。

将安全性作为第一列的插入应该永远不会给出问题。您最终将没有混合页面(每页多个证券),因此插入将与单独表格完全相同,因为安全值不会导致页面拆分(尽管它们可能由其他问题)。