【发布时间】:2015-03-30 08:59:12
【问题描述】:
我要创作:
- 用于存储 ID 和唯一文本值的表(预计 大)
- 将文本值作为输入参数的存储过程 (它将检查上表中是否存在该值并返回 如果存在对应的ID,如果不存在则插入新记录,并且 也返回新 ID)
我想使用文本的哈希值优化文本值的搜索并在其上创建索引。因此,在搜索过程中,我希望使用非聚集索引(而不是聚集索引)。
我决定将HASHBYTES 与SHA2_256 一起使用,我想知道如果我将哈希值存储为BINARY(32) 或NVARCHAR(16) 是否有任何区别/好处?
【问题讨论】:
-
如何比搜索文本更快地搜索文本的哈希?如果你想要哈希桶,他们使用内存优化表。
-
我可以在哈希值上创建索引,而在
NVARCHAR(MAX)上创建索引会给我警告。该索引将被排序,并且比较binary(32)值然后nvarchar(max)值应该更快。此外,使用哈希创建索引并包括ID(在我的情况下)将使我能够使用索引本身(在搜索时) - 否则,我需要使用聚集索引,这意味着更多的 IO 操作。
标签: sql tsql sql-server-2012 hashbytes