【问题标题】:Storing HASHBYTES output in NVARCHAR vs BYTES在 NVARCHAR 与 BYTES 中存储 HASHBYTES 输出
【发布时间】:2015-03-30 08:59:12
【问题描述】:

我要创作:

  • 用于存储 ID 和唯一文本值的表(预计 大)
  • 将文本值作为输入参数的存储过程 (它将检查上表中是否存在该值并返回 如果存在对应的ID,如果不存在则插入新记录,并且 也返回新 ID)

我想使用文本的哈希值优化文本值的搜索并在其上创建索引。因此,在搜索过程中,我希望使用非聚集索引(而不是聚集索引)。

我决定将HASHBYTESSHA2_256 一起使用,我想知道如果我将哈希值存储为BINARY(32)NVARCHAR(16) 是否有任何区别/好处?

【问题讨论】:

  • 如何比搜索文本更快地搜索文本的哈希?如果你想要哈希桶,他们使用内存优化表。
  • 我可以在哈希值上创建索引,而在 NVARCHAR(MAX) 上创建索引会给我警告。该索引将被排序,并且比较 binary(32) 值然后 nvarchar(max) 值应该更快。此外,使用哈希创建索引并包括ID(在我的情况下)将使我能够使用索引本身(在搜索时) - 否则,我需要使用聚集索引,这意味着更多的 IO 操作。

标签: sql tsql sql-server-2012 hashbytes


【解决方案1】:

您不能合理地将哈希值存储为字符,因为二进制数据不是文本。各种文本处理和比较函数解释这些字符。例如,有时会忽略尾随空格,从而导致不正确的结果。

因为您有 32 个完全随机的非结构化字节来存储 binary(32) 是最自然的格式,也是最快的格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2015-11-12
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多