gpt4 book ai didi

sql - 在 SQL Server 中对 NVARCHAR(MAX) 列建立索引

转载 作者:行者123 更新时间:2023-12-03 01:42:01 27 4
gpt4 key购买 nike

当我将列定义为 NVARCHAR(MAX) 时,我无法对该列建立索引。但我当然不能将列定义为 NVARCHAR(4000) 因为我认为数据字符串有时会更长。

任何人都可以建议如何使用 NVARCHAR(MAX) 数据定义对列进行索引,或者是否可以将长度从 4000 增加到更多?

最佳答案

  1. 您有 nvarchar(4000) 或 nvarchar(max)。中间没有任何内容
  2. 索引键列的最大长度为 900 字节,因此您也无法对 nvarchar(4000) 建立索引(即 8000 字节)

就我个人而言,我不明白为什么你需要索引 nvarchar(max)。
您真的要搜索长达 1GB 的字符串吗?

无论如何,您唯一的选择是使用HASHBYTES在持久计算列中。
您创建列的哈希,并为哈希建立索引。

请注意,根据版本的不同,您可能无法对 nvarchar(max) 进行哈希处理

For SQL Server 2014 and earlier, allowed input values are limited to 8000 bytes.

同样强制执行唯一性的 SQL Server 2016 代码示例
SHA2_512 哈希产生冲突的可能性最小。对于足够大的表,像 MD4 这样的较弱哈希将命中 birthday problem

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

请注意,您不能进行 LIKE 搜索。仅=<>

关于sql - 在 SQL Server 中对 NVARCHAR(MAX) 列建立索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47709493/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com