为数据库性能选择表设计

时间:2010-09-28 19:45:51

标签: sql-server database

我正在开发一个执行多个并行作业的Job应用程序。每项工作都将从第三方来源和流程中提取数据。最低记录为100,000。所以我为每个工作创建新表(如Job123.123是jobId)并处理它。当工作开始时,它将清除旧记录并获得新记录和处理。现在问题是我有1000个工作,DB有1000个表。由于有很多表格,数据库大小急剧增加。

我的问题是,是否可以为每个作业创建新表。或者只有一个名为Job的表并具有列jobId,然后输入数据并进行处理。唯一的问题是每个工作都会有100,000多条记录。如果我们只有一个表,那么DB性能是否会受到影响?

请让我知道哪种方法更好。

2 个答案:

答案 0 :(得分:1)

不要创建所有这些表!虽然它可能会起作用,但是会有巨大的性能损失。

拥有一张大桌子很好,这就是数据库的用途。但是......我怀疑你不需要1亿个持续记录,对吗?看起来你一次只处理一个Job,但目前还不清楚。

修改

数据库将增长到所需的最大大小,但重用已删除记录的空间。如果您添加100k记录并一遍又一遍地删除它们,数据库将不会继续增长。但即使在删除后,它也会占用100k记录的空间。

答案 1 :(得分:0)

我建议为所有工作使用一张大表。对于每种事物,应该有一个表,而不是每个事物都有一个表。

如果将作业ID作为聚簇索引中的第一个字段,SQL Server将使用b树索引来确定表中数据的物理顺序。原则上,由于物理排序顺序,数据将按作业ID自动按物理分组。由于碎片,这可能不会永远保持严格,但这也会影响多表设计。

对于单个作业操作而言,将作业ID作为大表的第一个关键字段的性能影响应该可以忽略不计,而不是为每个作业分别设置一个表。

此外,对于相同数量的总数据,单个大表通常比多个表更节省空间。这将通过减少缓存压力来提高性能。