计算列索引

Mik*_*sny 5 performance sql-server-2005 calculated-columns

我有一个Com_Main包含列的表CompanyName nvarchar(250).它的平均长度为19,最大长度为250.

为了提高性能,我想添加一个计算列left20_CompanyName,它保存前20个字符CompanyName:

alter table Com_main 
add left20_CompanyName as LEFT(CompanyName, 20) PERSISTED
Run Code Online (Sandbox Code Playgroud)

然后我在这个专栏上创建索引:

create index ix_com_main_left20CompanyName 
on Com_main (LEFT20_CompanyName)
Run Code Online (Sandbox Code Playgroud)

所以我用的时候

select CompanyName from Com_Main
where LEFT20_CompanyName LIKE '122%'
Run Code Online (Sandbox Code Playgroud)

它使用这个非聚集索引,但当查询如下:

select CompanyName from Com_Main 
where CompanyName LIKE '122%'
Run Code Online (Sandbox Code Playgroud)

它使用全表扫描,不使用此索引.

所以问题是:

是否有可能使SQL Server在上一次查询中的可计算列上使用此索引?

dwu*_*urf 1

不可以。MySQL支持 varchar 列的部分索引,但 MS SQL Server 不支持。

你也许可以通过分区来加速表扫描,但我不知道SQL Server在这方面有多智能。