[英]Finding Max Value of an nvarchar column in sql server 2012 using LINQ
[英]Indexing an NVARCHAR(MAX) column in SQL Server
當我將一列定義為NVARCHAR(MAX)
,我無法索引該列。 但我當然不能將列定義為NVARCHAR(4000)
因為我認為數據字符串有時會更長。
任何人都可以建議如何使用NVARCHAR(MAX)
數據定義對列進行索引,或者是否可以將長度從 4000 增加到更多?
就個人而言,我不明白為什么需要索引 nvarchar(max)。
您真的要搜索長達 1GB 的字符串嗎?
無論如何,您唯一的選擇是在持久計算列中使用HASHBYTES 。
您創建列的散列,並索引散列。
請注意,根據您可能無法對 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
請注意,您不能進行 LIKE 搜索。 只有=
或<>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.