【问题标题】:Check for unique combination of large column list before inserting to SQL Server在插入到 SQL Server 之前检查大列列表的唯一组合
【发布时间】:2017-09-06 19:37:21
【问题描述】:

我有一个包含大约 100 列的表,如果列的组合是唯一的,则只需要添加一个新行。问题是我需要检查大约 50 列,因此一个简单的 where 子句在处理大量数据时可能会非常慢。

是否建议事先在 C# 中创建这些字段的所有值的唯一哈希,并将其存储在表的新列中并基于此进行比较?

【问题讨论】:

  • 等式检查比散列更快,尤其是在列被索引的情况下。
  • 我同意。为什么不是一个大的WHERE col1 = :val1 AND col2 = :val2 等?
  • 那么构建一个 50 列的 where 子句比较好?
  • @NickReeve 为什么你必须首先这样做?除了检查每一列之外,您如何最终无法识别重复项?数据中是否没有键或标识符?
  • 可能会更好。至少您不必更改您的数据库架构,保持散列是最新的,并计算超过 50 个值的散列来进行比较。但您可能还有其他限制。

标签: c# sql-server hash unique


【解决方案1】:

您可以使用此链接 (hash a SQL row?) 对您要插入的行和表中已经存在的行进行哈希处理,并使用此校验和来验证唯一性

【讨论】:

    【解决方案2】:

    这听起来是实现合并的好地方(如果您还要更新匹配的记录)。以下是 MSDN 的文章:

    https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql

    【讨论】:

    • 这应该是一个评论。无论如何,合并无济于事。您仍然必须比较所有列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多