首页 > 数据库 > > SQL Server间接实现函数索引或者Hash索引
SQLServer中没有函数索引,在某些场景下查询的时候要根据字段的某一部分做查询或者经过某种计算之后做查询,
如果使用函数或者其他方式作用在字段上之后,就会限制到索引的使用,不过我们可以间接地实现类似于函数索引的功能。
在计算列上建索引,实现“函数索引”的功能
SQLServer在建表的时候允许使用计算列,可以借助这个计算列来实现函数索引的功能,这里举例说明一下
Create Table TestFunctionIndex
(
id int identity(1,1),
val varchar(50),
subval as LOWER(SUBSTRING(val,10,4)) persisted --增加一个持久化计算列
)
GO
--在持久化计算列上建立索引
create index idx_subvar on TestFunctionIndex(subval)
GO
--插入10W行测试数据
insert into TestFunctionIndex(val) values (NEWID())
go 100000
在有索引的字段上使用函数之后,是无法使用索引的

如果直接在计算列上查询,就可以正常地使用到索引了

以上通过在计算列上建立一个索引,可以根据计算列上的索引做查找,避免了直接在字段上使用函数或者其他操作,造成即便字段上有索引也用不到的情况
补充:
测试中神奇地发现,如果计算列字段上建立了索引,在原始字段上使用函数与计算列的函数一样的时候,可以神奇地使用到计算列上的索引
可见SQLServer在我们没有注意的地方也是下了不少功夫的啊

转载自:http://www.cnblogs.com/wy123/p/6617700.htm
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3165632/ ,如需转载,请注明出处,否则将追究法律责任。