【问题标题】:choosing table design for database performance为数据库性能选择表设计
【发布时间】:2010-09-28 19:45:50
【问题描述】:

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

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

请告诉我哪种方法更好。

【问题讨论】:

    标签: sql-server database


    【解决方案1】:

    不要创建所有这些表!尽管它可能有效,但性能会受到巨大影响。

    有一个大表很好,这就是数据库的用途。但是...我怀疑您不需要 1 亿条持久 记录,对吗?看起来您一次只处理一个作业,但不清楚。

    编辑

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

    【讨论】:

    • 是的。它只是暂时的。但有时工作会不完整,那时我会存储数据,所以工作将从离开的地方重新开始。
      如果我们继续添加和删除数据库大小会增加仪式吗?我们如何使这种收缩自动化?
    【解决方案2】:

    我建议为所有作业使用一张大桌子。每种东西都应该有一张桌子,而不是每种东西一张桌子。

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

    将作业 ID 作为大型表的第一个键字段对性能的影响对于单个作业操作应该可以忽略不计,而不是为每个作业使用单独的表。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-17
      • 2012-01-20
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2012-10-05
      • 2011-02-26
      相关资源
      最近更新 更多