哪个选项是最佳性能?

Posted

技术标签:

【中文标题】哪个选项是最佳性能?【英文标题】: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 个小数)。不需要单独的表。使用多个表会使编程复杂化。在性能方面,基于最大行长度,单个表优于多个表。 【参考方案1】:

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

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

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

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

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

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

【讨论】:

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

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

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

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

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

我会选择两张桌子

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

【讨论】:

以上是关于哪个选项是最佳性能?的主要内容,如果未能解决你的问题,请参考以下文章

哪个是自动 GUI 性能测试的最佳工具? [关闭]

哪个数据存储系统提供最佳更新/更新插入性能?

哪个是执行三重连接查询的最佳性能设置

如何将数据从一个雪花实例迁移到另一个最佳性能选项?

mysql优化mysql count(*)countcount(主键字段)count(非主键字段)哪个性能最佳

Async / await vs then 哪个最适合性能?