SQLServer性能优化性能优化–间接实现函数索引或者间接实现函数索引或者Hash索引索引
SQLServer中没有函数索引,在某些场景下查询的时候要根据字段的某一部分做查询或者经过某种计算之后做查询,如果使用函数或者其他方式作用在字段上之后,就会限制到索引
的使用,不过我们可以间接地实现类似于函数索引的功能。
另外一个就是如果查询字段较大或者字段较多的时候,所建立的索引就显得有点笨重,效率也不高,就需要考虑使用一个较小的”替代性”字段做等价替换,类似于Hash索引,
本文粗浅地介绍两种上述两种问题的解决方式,仅供参考。
1,在计算列上建索引,实现,在计算列上建索引,实现“函数索引函数索引”的功能的功能
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在我们没有注意的地方
也是下了不少功夫的啊
评论10
最新资源