暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL Server间接实现函数索引或者Hash索引

SQLServer走起 2021-02-07
1897

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在我们没有注意的地方也是下了不少功夫的啊

      

    文章转载自:

    https://www.cnblogs.com/wy123/p/6617700.html

    文章经作者授权转载,版权归原文作者所有

    图片来源于网络,侵权必删!

    文章转载自SQLServer走起,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论