在SQL Server中,我可以在“AS”列上编制索引吗?
问题描述:
我有这个表:在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)),
}
我想指数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])
https://docs.microsoft.com/en-us/sql/relational-databases/indexes/indexes-on-computed - 列 – artm
你*尝试*吗?如果是这样,它是否成功或返回错误信息?这似乎比在互联网上询问随机陌生人更快。 –