位置: 编程技术 - 正文

详解SQL Server的聚焦过滤索引(sql server基本知识)

编辑:rootadmin

推荐整理分享详解SQL Server的聚焦过滤索引(sql server基本知识),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:sql server的go,sql server的介绍,sql-server,sql servers,sql-server,sql server基本知识,sql server基本知识,sql-server,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

这一节我们还是继续讲讲索引知识,前面我们聚集索引、非聚集索引以及覆盖索引等,在这其中还有一个过滤索引,通过索引过滤我们也能提高查询性能,简短的内容,深入的理解。

过滤索引,在查询条件上创建非聚集索引(1)

过滤索引是SQL 的新特性,被应用在表中的部分行,所以利用过滤索引能够提高查询,相对于全表扫描它能减少索引维护和索引存储的代价。当我们在索引上应用WHERE条件时就是过滤索引。也就是满足如下格式:

下面我们来看一个简单的查询

上述列中未建立任何索引,当然除了SalesOrderDetailID默认创建的聚集索引,这种情况下我们能够猜想到其执行的查询计划必然是主键创建的聚集索引扫描,如下

上述我们已经说过此时未在查询条件上创建索引,所以此时必然走的是主键创建的聚集索引,接下来我们首先在UnitPrice列上创建非聚集索引来提高查询性能,

此时我们再来比较二者查询开销

此时在查询条件上建立了非聚集索引之后,查询开销提升的非常明显,提升达到了%以上,因为非聚集索引也会引用了主键创建的聚集索引,所以这个时候不会导致Bookmark Lookup或者Key Lookup查找。接下来我们我们再添加一个带有条件的非聚集索引即过滤索引

此时我们再来看看创建了过滤索引之后和之前非聚集索引性能开销差异:

此时我们知道创建的非聚集过滤索引与传统创建的非聚集索引相比,我们的查询接近减少了一半。

唯一过滤索引

唯一过滤索引对于所有列必须唯一且不为空(只允许一个NULL存在)也是非常好的解决方案,所以此时在创建唯一过滤索引时需要将NULL值除外,比如如下:

过滤索引结合INCLUDE

当我们再添加一个额外列时,使用默认主键创建的聚集索引时,此时会走聚集索引扫描,然后我们在查询条件上创建一个过滤索引,我们强制使用这个过滤索引时,此时由于添加额外列,会导致需要返回到基表中再去获取数据,所以也就造成了Key Lookup查找,如下:

此时我们需要用INCLUDE来包含额外列。

我们再创建一个过滤索引同时包括额外列

接下来再来执行比较添加过滤索引和未添加过滤索引同时都包括了额外列的性能查询差异。

此时性能用INCLUDE来包含额外列性能也得到了一定的改善。

过滤索引,在主键上创建非聚集索引(2)

在第一个案列中,我们可以直接在查询列上创建非聚集索引,因为其类型是数字类型,要是查询条件是字符类型呢?首选现在我们先创建一个测试表

添加万条测试数据

如果我们需要获取表TestData中SomeValue = 'JeffckyWang',此时我们想要在SomeValue上创建一个非聚集索引然后进行过滤,如下

更新

详解SQL Server的聚焦过滤索引(sql server基本知识)

SQL Server对创建索引大小有限制,最大是字节,上述直接写的VARCHAR(MAX),所以会出错,切记,切记。

此时我们在主键上创建非聚集索引,我们在主键RowID上创建一个过滤索引且SomeValue = 'JeffckyWang',然后返回数据,如下:

下面我们来对比建立过滤索引前后查询计划结果:

然后结合之前所学,移除Key Lookup,对创建的过滤索引进行INCLUDE。

从这里看出,无论是对查询条件创建过滤索引还是对主键创建过滤索引,我们都可以通过结合之前所学来提高查询性能。

我们从开头就一直在讲创建过滤索引,那么创建过滤索引优点的条件到底是什么?

(1)只能通过非聚集索引进行创建。

(2)如果在视图上创建过滤索引,此视图必须是持久化视图。

(3)不能在全文索引上创建过滤索引。

过滤索引的优点

(1)减少索引维护成本:对于增、删、改等操作不需要代价没有那么昂贵,因为一个过滤索引的重建不需要耗时太多时间。

(2)减少存储成本:过滤索引的存储占用空间很小。

(3)更精确的统计:通过在WHERE条件上创建过滤索引比全表统计结果更加精确。

(4)优化查询性能:通过查询计划可以看出其高效性。

讲到这里为止,一直陈述的是过滤索引的好处和优点,已经将其捧上天了,其实其缺点也是显而易见。

过滤索引缺点

最大的缺点则是查询条件的限制。其查询条件仅限于

过滤条件仅限于AND、|、IN。比较条件仅限于 { IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !< },所以如下利用LIKE不行

如下可以

如下却不行

变量对过滤索引影响

上述我们创建过滤索引在查询条件上直接定义的字符串,如下:

如果定义的是变量,利用变量来进行比较会如何呢?首先我们创建一个过滤索引

利用变量来和查询条件比较,强制使用过滤索引(默认情况下走聚集索引)

查看查询执行计划结果却出错了,此时我们需要添加OPTION重新编译,如下:

上述利用变量来查询最后通过OPTION重新编译在SQL Server 中测试好使,至于其他版本未知,参考资料【The Pains of Filtered Indexes】。

总结

本节我们学习了通过过滤索引来提高查询性能,同时也给出了其不同的场景以及其使用优点和明显的缺点。简短的内容,深入的理解,我们下节再会,good night。

标签: sql server基本知识

本文链接地址:https://www.jiuchutong.com/biancheng/319002.html 转载请保留说明!

上一篇:浅述SQL Server的聚焦强制索引查询条件和Columnstore Index(sql server概述)

下一篇:浅谈Transact-SQL(浅谈一下新冠的好处)

  • 如何开具免税发票
  • 预提费用
  • 价外费用是含税价还是不含税价
  • 个税手续费返还比例
  • 公司亏损汇算清单模板
  • 物流托运不给发货怎么办
  • 利润表中所得税费用包括哪些
  • 销售人员的工资属于什么会计科目
  • 企业购买房产每年需要交什么税
  • 政府购买服务合同最多签几年
  • 验资报告费用计入什么科目
  • 委托加工的材料计入什么科目
  • 汽车贷款利息是什么
  • 进项税当期已转出能调整再抵扣吗?
  • 快递快件丢失
  • 个体生产经营所得税税率2023
  • 小规模纳税人餐饮业税率是多少
  • 印花税申报完成后如何缴款
  • 文化传媒行业会计
  • 跨地区经营建筑企业预缴增值税可以先开票后预缴吗
  • 小规模纳税人的季度
  • 固定资产叉车卖出怎么开票
  • 月末印花税会计分录
  • 冲减增值税销项税额
  • 服装具有什么性
  • 供应商是收款人还是付款人
  • 补缴社保滞纳金怎么做账
  • 应付账款少付怎么做账
  • 某房产开发公司向银行借款
  • 苹果Mac系统怎么用光盘安装
  • 3%征收率减按2%征收增值税怎么算
  • .exe文件怎么打不开
  • 结转本月各项损益
  • 查补以前年度房产税的账务处理
  • 如何使用windows的记事本创建文件
  • 如何找装修公司
  • .ini是什么类型文件?
  • 应交营业税计算公式
  • PHP:mcrypt_ofb()的用法_Mcrypt函数
  • 企业增加实收资本流程
  • 二级路由器怎么配置
  • 股东个人消费如何合理报销
  • vue传值inject
  • 暂估原材料的数量怎么算
  • win11电源高性能模式代码
  • 孪生神经网络 计算相似度
  • 新版本idea怎么创建javaweb
  • elinks --dump
  • nodejs基础知识
  • 金税盘中的发票修复是什么意思
  • 个人所得税专项扣除新标准一览表最新
  • 财务的原始凭证
  • 个人独资企业购入设备可以一次性计提吗
  • 分公司企业所得税怎么缴纳
  • 如何根据科目余额表做资产负债表
  • 注销时其他应付款怎么冲平
  • 生产加工企业辅导资料
  • 一年的系统服务费多少钱
  • 计提社保如何做分录
  • 跨两年的发票可以冲红吗
  • 商品折扣计入哪个科目
  • 利得与损失的四种类型
  • Win7系统如何关闭自动更新
  • ubuntu20.04怎么安装
  • 电脑开机自动弹出
  • mac 设置
  • centos7安装过程报错
  • centos重新安装命令
  • os x10.10.4beta6下载地址 os x10.10.4beta6官方下载网址
  • 苹果电脑dashboard什么意思
  • w8系统怎么用
  • 防止 避免
  • unity数学函数
  • cocos2d::Vector
  • unity3d的游戏
  • 如何检测ip地址是否被占用
  • jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
  • Android 使用 ASM 修改函数
  • 每天一篇文章锻炼口才的文章
  • 浙江省税务局发短信是真的吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设