【问题标题】:Oracle DB, creating unique constraint on multiple columns for insert , how about performanceOracle DB,在多个列上创建唯一约束以进行插入,性能如何
【发布时间】:2017-08-10 01:57:28
【问题描述】:

朋友们,

我是 DB 企业的新手,我需要一些帮助/信息。 我们的项目中有一个表说“record_table”,其中的值是使用 C++ 代码插入的。

此表有多个列,其中三列表示例如。 “serialNo, type, sub_type” C++ 代码正在为这些列的组合插入重复值(这些列对于该表来说不是唯一的或主要的)。但是 3 列的组合应该是唯一的。

现在我们要确保不应插入此组合的重复项。我正在考虑为这些列添加唯一约束,以便在插入带有这些重复值的新记录时,它不会允许。

我认为这应该可行,但我怀疑它是否会影响性能,C++ 二进制文件每天运行并插入大约 200 万条记录。将创建唯一约束命中性能。(意味着运行时间会减慢或由于表有数百万条记录将创建唯一约束没有意义,因为它必须对这些列进行哈希等)

如果可以,请提出建议。

【问题讨论】:

    标签: database oracle performance


    【解决方案1】:

    唯一约束通过索引强制执行。无论如何,您都可能需要该索引来再次查询数据,因此维护它的开销无关紧要。

    真正的问题是,如果不强制执行约束,处理重复记录对性能有何影响?一般来说,与修复数据损坏相比,强制约束对性能的影响是微不足道的。

    【讨论】:

    • 好答案。再加上每天 200 万次插入非常少。
    • 对于大多数人@BobC 来说,一年 7.3 亿条记录并不是那么小。此时,您需要对基础架构和数据架构进行一些思考,尤其是当负载在一天中分布不均时。如果你不注意的话,仅仅购买许可证来处理这个问题很快就会变得昂贵。
    • 我同意@Ben - 与 Twitter firehose 相比,200 万个插入非常小,但对于大多数 RDBMS 应用程序来说,这已经很多了:足以值得深思熟虑。如果您在很容易陷入困境之前没有处理过这样的数据量。
    • 好吧,问题更多是关于性能与数据量的关系。我同意需要考虑这些事情,但我有一个用于培训和演示的系统,每秒处理大约 40,000 笔交易。因此,如果您说每天 200 万次插入超过 8 小时(而不是 24 小时),那么每秒的事务数少于 70 次。这应该在我的笔记本电脑的能力范围内。
    • 感谢大家的回复和建议。就我而言,C++ 批处理作业每天运行一次,持续几个小时,这就是它进行数据按摩并在表中插入大约 2 M 条记录的地方。我计划对 POC 使用唯一约束,并尝试检查时间执行与未添加约束时的差异。会及时通知大家。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多