Sha*_*nda 4 sql sql-server sql-server-2005 sql-server-2008
当我将列定义为时NVARCHAR(MAX),我无法索引该列.但我当然无法定义列,NVARCHAR(4000)因为我假设数据字符串有时会更长.
任何人都可以建议如何使用NVARCHAR(MAX)数据定义索引列,还是可以将长度从4000增加到更多?
gbn*_*gbn 11
就个人而言,我不明白为什么你需要索引nvarchar(max).
你是否真的要搜索长达1GB的字符串?
无论如何,您唯一的选择是在持久计算列中使用HASHBYTES.
您创建列的哈希,并索引HASH.
注意,取决于您可能无法散列的版本nvarchar(max)
对于SQL Server 2014及更早版本,允许的输入值限制为8000字节.
SQL Server 2016代码示例也强制执行唯一性
SHA2_512哈希提供最少的冲突机会.对于足够大的表,像MD4这样较弱的哈希会遇到生日问题
CREATE TABLE dbo.HashExample (
SomeID int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
SomeLongText nvarchar(MAX) NULL,
SomeHash AS HASHBYTES('SHA2_512', SomeLongText) PERSISTED
)
GO
CREATE UNIQUE INDEX UX_SomeHash ON dbo.HashExample(SomeHash) WHERE SomeLongText IS NULL
GO
INSERT dbo.HashExample (SomeLongText) VALUES ('Row 1'), ('Row 2')
GO
SELECT * FROM dbo.HashExample
GO
DECLARE @LookFor nvarchar(MAX) = 'Row 3'
SELECT * FROM dbo.HashExample WHERE SomeHash = HASHBYTES('SHA2_512', @LookFor)
SET @LookFor = 'Row 2'
SELECT * FROM dbo.HashExample WHERE SomeHash = HASHBYTES('SHA2_512', @LookFor)
GO
Run Code Online (Sandbox Code Playgroud)
请注意,您不能进行LIKE搜索.只有=或<>
| 归档时间: |
|
| 查看次数: |
2494 次 |
| 最近记录: |