哪个选项是最佳性能?

时间:2019-08-07 15:20:57

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

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

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

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

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

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

是否同时更改了所有50列。 是的,所有列都立即更改

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

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

所有原始行是否都将具有额外的20列。 并非所有行都需要附加列

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

2 个答案:

答案 0 :(得分:0)

性能差异可能不会有太大关系。需要有关您的环境的更多信息:

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

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

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

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

如果这行得通并且满足您的性能目标,那就好。如果您发现多个表比较麻烦,请稍后再考虑修改现有表。

答案 1 :(得分:0)

请确保您的“旧”功能可以容纳表格中存在的其他字段(例如,它不应包含“ select * from ...”)。

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

这应该比具有两个具有新功能的左连接表的性能更好,并且对旧功能的性能影响很小。

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

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