在 SQL Server 中,我可以对"AS"列编制索引吗?



我有此表:

CREATE TABLE [dbo].[Kanji] 
(
    [KanjiId] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    [Text] NVARCHAR(5) NOT NULL,
    [Freq] INT NULL,
    [Grade] INT NULL,
    [Hash] AS (CONVERT([bigint], hashbytes('md5', [Name])) % (5) + (5)),
}

我想通过TextHash索引。但是,使用AS表达式计算的列有可能吗?如果是这样,我应该考虑绩效问题?

表中没有Name列,因此您的公式可以创建Hash文件...

假设您打算进行Text的哈希,请尝试以下操作:

CREATE TABLE [dbo].[Kanji] 
(
    [KanjiId] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    [Text] NVARCHAR(5) NOT NULL,
    [Freq] INT NULL,
    [Grade] INT NULL,
    [Hash] AS (CONVERT([bigint], hashbytes('md5', [Text]) % (5) + (5))) PERSISTED
)

通过将PERSISTED关键字添加到计算公式中,实际上您将这些计算值在磁盘上存储在磁盘上,然后使用表行,就好像它是"正常"列。因此,您可以绝对(Text, Hash)上添加索引:

CREATE NONCLUSTERED INDEX ix01_Kanji ON dbo.Kanji([Text], [Hash])

最新更新