我有此表:
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)),
}
我想通过Text
和Hash
索引。但是,使用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])