【问题标题】:Select distinct on blob在 blob 上选择不同的
【发布时间】:2012-08-29 15:06:30
【问题描述】:

有没有办法验证 Oracle 数据库中更多行中 blob 中的值是否相同? blob 是同一列。

我将 blob 的大小存储在另一列中,但我需要知道该值是否也相等。

存储的值是一个序列化的对象。

【问题讨论】:

  • 不幸的是,假设您要识别 哪些 行包含相同的值,则无法避免 JOIN 句点。至少,在条件中添加对象大小列,并确保它在所有索引中排在第一位(引用BLOB) - 这应该有助于比较(通过消除不同大小的行)。
  • 使用JOIN是没有问题的。

标签: sql database oracle blob


【解决方案1】:

我建议添加另一列,其中包含 blob 值的 hash。当您存储 blob 时,您还计算哈希值,例如使用 SHA256 并存储它。当您以后想要不同的值时,您只需使用这个新列。

【讨论】:

  • 有什么特殊的命令可以直接通过SQL命令计算一个已有blob值的hash吗?
  • 阅读this question,了解如何在数据库中进行操作。
  • 我建议您存储该哈希值并且不要每次都为所有行计算它,因为这是一项昂贵的操作。
  • 我只想补充一点,您使用哈希并执行额外的相等条件,希望哈希会消除明显不同的 blob,并且平等会防止您遭受哈希冲突。
  • @DanielMošmondor 如果您使用诸如SHA256SHA512 之类的散列算法,目前没有任何已知漏洞,我认为不需要执行额外的相等比较。此外,如果您添加额外的相等比较,查询引擎会决定执行它们的顺序,它可能会在哈希比较之前结束。
猜你喜欢
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多