SQL SERVER 2019 视图索引 的一个应用用例

--本用例在SQL SERVER 2019 测试通过

select @@VERSION
--Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)   Sep 24 2019 13:48:23   Copyright (C) 2019 Microsoft Corporation  Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 18363: ) 

--创建表并插入数据

create table tviewindex(ci int identity(1,1),cvb VARBinary(200));

truncate table tviewindex;

insert into tviewindex(cvb) values (ENCRYPTBYPASSPHRASE('test', CONVERT(VARCHAR(200),NEWID()), 1, CONVERT( varbinary,'fjw' )));

go 1000

select * from tviewindex

--创建视图

CREATE VIEW dbo.V_VIEWINDEX

WITH SCHEMABINDING

AS

select ci,CONVERT( VARCHAR(4000),DECRYPTBYPASSPHRASE('test',cvb, 1,CONVERT( varbinary, 'fjw'))) AS CVB

from dbo.tviewindex t ;

创建唯一聚簇索引(必须)

create UNIQUE CLUSTERED index idx_vvi on V_VIEWINDEX(ci);

创建普通索引(可选)

create index idx_vvi2 on V_VIEWINDEX(cvb);

--警告! 聚集的 索引的最大键长度为 900 个字节。索引“idx_vvi”的最大长度为 4000 个字节。对于某些大值组合,插入/更新操作将失败。

--警告! 非聚集的 索引的最大键长度为 1700 个字节。索引“idx_vvi2”的最大长度为 4000 个字节。对于某些大值组合,插入/更新操作将失败。

 

--SQL SERVER2012企业版报错:无法对视图 'test01.dbo.V_VIEWINDEX' 创建 索引。函数 'DecryptByPassPhrase' 生成具有不确定性的结果。请使用具有确定性的系统函数,或者修改用户定义函数以返回具有确定性的结果。

 

--默认情况下,如下语句不使用索引

select * from dbo.V_VIEWINDEX

where CVB='EF312B77-0133-4CD3-BD5F-CEB753F18FCD'

执行计划1

 

添加WITH (NOEXPAND)选项后使用索引

select * from dbo.V_VIEWINDEX WITH (NOEXPAND)

where CVB='EF312B77-0133-4CD3-BD5F-CEB753F18FCD'

执行计划2

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值