【问题标题】:Which is option is best performance?哪个选项是最佳性能?
【发布时间】:2019-08-07 15:20:57
【问题描述】:

我正在为我的应用程序开发一项新功能,我需要将一些新数据添加到我的数据库 DB2

我已经有 1 个包含大约 50 列的表格,我将在其中将我的数据显示在我的屏幕上。我还需要 20 列来实现我的新功能。 我总是会得到 1 行,每次只更新/插入 1 行

哪一个性能最好?在我已经拥有的表中创建 30 列或创建一个新的 30 列“子表”。如果选项是 2 号,那么更新数据的最佳性能方式是什么? 多个更新或连接更新(如果可能)?

编辑: 更正:我的原始表格有 54 列

原始 30 列和 20 列的插入/更新频率。 我不知道您所说的频率是什么意思,但它平均每 10 或 20 秒更新一次。 (编辑:如果我使用旧功能,我将始终更新所有 30 个原始列。如果我使用新功能,我将需要更新所有 50 列(30 个旧 + 20 个新列)

是否一次更改所有 50 列。 是的,所有列都会立即更改

系统上的查询负载。 不明白你的意思

存在索引(这会减慢更新速度)。 原表有4个索引

所有原始行是否都会有额外的 20 列。 并非所有行都需要额外的列

典型行长: 3 的字符和 3 的小数

【问题讨论】:

  • 什么 Db2?有哪些类型?典型的行长?桌子尺寸?数据页大小?有多少并行用户?以后添加新“功能”的可能性有多大,需要新列...?
  • 最大行长度 150(基于典型的列长度:3 个字符和 3 个小数)。不需要单独的表。使用多个表会使编程复杂化。在性能方面,基于最大行长度,单个表优于多个表。

标签: sql performance db2 sql-update sql-insert


【解决方案1】:

性能差异可能并不重要。需要更多关于您的环境的信息:

  • 原始 30 列和 20 列的插入/更新频率。
  • 是否同时更改所有 50 列。
  • 系统上的查询负载。
  • 存在索引(这会减慢更新速度)。
  • 所有原始行是否都会有额外的 20 列。

由于这是一项新功能,我可能倾向于执行以下操作:

  1. 向原始数据添加一个包含 20 行附加行和一个主键的新表。
  2. 确保先插入现有表,然后再插入新表。
  3. 如果需要,添加一个将两个表与left join 组合在一起的视图。

这种方法对现有表没有任何影响。

如果这可行并且符合您的性能目标,那很好。如果您发现多个表很麻烦,那么稍后考虑修改您现有的表。

【讨论】:

  • 戈登知道答案。我编辑了我的问题,以便它可以回答您的问题
  • @JoãoBaptista "插入/更新原始 30 列和 20 列的频率。" ... Gordon 的意思是,如果您需要更新 20 列 every time 您更新 30col 表,或者您不那么频繁地更新 20col 表。
【解决方案2】:

确保您的“旧”功能允许表格上存在其他字段(例如,它不应包含“select * from ...”)。

在现有表上将新字段定义为可为空或“默认不为空”。

这应该比为新功能使用两个带有左连接的表性能更高,并且对旧功能性能的影响很小。

这也是一种可扩展的方法,即如果您每个月添加一个带有几个新字段的新功能,那么您不希望从现在开始每年加入 12 个表。

我会选择两张桌子

  • 这是一个很少使用的新功能
  • 新旧关系变为 1:n
  • 已达到旧表的列限制
  • 旧功能代码无法测试/更改

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    相关资源
    最近更新 更多