我有这张桌子:
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
表达式计算的列是否可能?如果是这样,我应该考虑性能问题?
答案 0 :(得分:3)
表格中没有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])