位置: 编程技术 - 正文

通过使用正确的search arguments来提高SQL Server数据库的性能(在正确使用和正常维护的条件下)

编辑:rootadmin

推荐整理分享通过使用正确的search arguments来提高SQL Server数据库的性能(在正确使用和正常维护的条件下),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:对于怎么使用,进行使用,使用的正确方法,使用的正确方法,对于怎么使用,使用的正确方法,采用 使用,对于怎么使用,内容如对您有帮助,希望把文章链接给更多的朋友!

原文地址: Server上关于indexing的一个特定的性能问题。

问题

看看下面的简单的query语句,可能你已经在你看到过几百次了

上门的代码查询一个销售信息,需要一个特定的月份和年份的,这不是很复杂。但是不幸的的事,这个qeury的效率不行,即使OrderDate这一列已经做了Non-Clustered Index。可以看看下面的qeury执行图,你能看到Query Optimizer已经选择了定义在列OrderDate下的Non-Clustered Index,但是SQL Server却做了Index的一个完整扫描,而不是期待中的Seek operation。

这实际上不是SQL Server的限制,而是relational database都是这样的。只要你对一个做了index的列(Search Argument)加了函数操作,数据库引擎就必须再次扫描这个index,而不是去直接执行seek operation

解决方案

通过使用正确的search arguments来提高SQL Server数据库的性能(在正确使用和正常维护的条件下)

为了解决上门的问题,必须要避免在列上门直接应该函数,比如上面的问题可以用下面的代码来代替

我们重写的这个query语句,能达到同样的效果,不用函数MONTH了。从此query的执行图来看,SQL Server执行了seek operation,在查询的范围内进行的scan。所以,如果你要在where查询中用到函数,用到表达式的右侧,来避免性能问题。比如下面的例子。

这个query会使SQL Server扫描了整个Non-Clustered Index。所以当表变得更大的时候,这个扩展性等各方面就很差了。如果把函数放在表达式的右侧,SQL Server就能执行seek operation了

总结

通过今天的blog,我想你们已经认识到了不要在做过indexed的列上直接应用函数,不然SQL Server会扫描你整个index,而不是做seek operation。当你的表变得越来越大的时,你会崩溃的。

译后记

这也是我在看微软SQL Server认证考试Exam-的TrainingKit的时候,它书里面反复强调的。简单来讲就是保证不要直接用函数作用在做过index的列上,要用函数的话,变通到表达式的右侧来。至于为什么会影响性能。因为我对index还不熟悉,我理解的不是很清晰。

我大概猜想如下,先记下,欢迎讨论。

对某一个列做index,是不是类似对这一列的数据做一个hash映射,当在查找这一列的数据的时候,直接可以做O(1)的操作(是不是就是它讲的seek operation)。如果对这一列使用了函数,SQL Server的机制就是不会重新做一个作用了函数后的列的hash,它就简单的一个一个的比较了。是O(N)的操作了。

CentOS安装SQL Server vNext CTP1教程 今天微软正式发布上SQLServerSP1,根据以往的SP1定律,可以在生产环境上使用了。打了SP1的标准版将具有企业版几乎所有的的功能。只有RAM超过GB或

SQL SERVER中强制类型转换cast和convert的区别详解 SQLSERVER中强制类型转换cast和convert的区别在SQLSERVER中,cast和convert函数都可用于类型转换,其功能是相同的,只是语法不同.cast一般更容易使用,convert的优点是

sql中 order by 和 group by的区别 orderby从英文里理解就是行的排序方式,默认的为升序。orderby后面必须列出排序的字段名,可以是多个字段名。groupby从英文里理解就是分组。必须有聚

标签: 在正确使用和正常维护的条件下

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

上一篇:SQL Server配置管理器无法连接到WMI提供程序(SQL server配置管理器打开TCP/IP后重启不了)

下一篇:CentOS安装SQL Server vNext CTP1教程(Centos安装ntfs-3g)

  • 会计信息采集每年都要采集吗
  • 税盘抵扣的会计分录
  • 劳务外包可以差额纳税吗
  • 工资3700扣多少社保钱
  • 固定资产适用范围
  • 非上市公司自然股权转让
  • 贸易公司发票怎么平衡
  • etc设备有区别吗
  • 投资性房地产的处置账务处理
  • 然后销售产品
  • 含税金额怎么计算
  • 十万位发票怎么开
  • 月底结转应交税费怎么弄
  • 劳务派遣差额征税税率是多少
  • 增值税发票系统怎么升级
  • 递延所得税怎么计提
  • 直接转让土地使用权 土地增值税申报表
  • 员工报销现在用什么软件
  • 公司购买自用房产税如何征收
  • 交通费,通讯费均按照上级行标准领取
  • 苹果手机上显示LTE是什么意思
  • 在Win7中,鼠标非最大化
  • 延期报税申请怎么操作
  • 往来账要交税吗
  • mom.exe是什么进程
  • php-fig
  • 塞巴斯蒂安电影 豆瓣
  • 增值税发票开错了可以退吗
  • thinkphp教程
  • 在代开发票时已经预缴个人所得税了,怎么处理?
  • 亚运村夜宵地方
  • thinkphp import
  • 账面价值大于计税基础为啥为递延所得税负债
  • 股东以原材料出资
  • ci框架如何做api
  • uniapp scroll-view基础用法
  • 共享主机和vps
  • thinkphp 分页
  • 所有者权益是什么类科目
  • 天猫一般纳税人如何纳税
  • 古腾堡中文官网
  • 网上变更财务负责人新负责人要确认吗
  • 税款要在15号前扣吗
  • 食堂采购原材料怎么在赣溯源备案
  • 软件企业的研发费用占比
  • 建筑业 成本
  • 因质量问题对方直接扣款也不开票
  • 建立固定资产管理台账
  • 带抵扣进项分录
  • 微众银行贷款到私账吗
  • 房地产 监控
  • 企业如何做账可以不交企业所得税
  • 企业代购是什么意思
  • sql注入是干嘛的
  • mysql查询慢的优化方案
  • xp系统电脑蓝屏无法正常启动怎么恢复
  • windowsxp2
  • 取消默认
  • windows 2003 iis+php5+mysql+phpmyadmin 详细安装配置
  • centos账号密码
  • win10系统如何给d盘加密
  • win7系统怎么关闭防火墙设置
  • windows8装 .NET 3.5 时出现0x800F081F错误解决方法
  • linux svn命令使用详解
  • win10组策略编辑器没有
  • cocos creator 碰撞检测
  • js原生实现ajax
  • node链接数据库
  • linux定时任务怎么立刻生效
  • 批处理命令在windows操作中的典型应用
  • django pypi
  • 浅析我国国防现状
  • Http TCP 协议
  • shell错误日志输出
  • unity平面透明
  • Android-SQLite商业化数据库操作
  • dom操作的方法
  • python排序算法比较
  • 金税三期个税下载官网手机版
  • 武汉税务局发票对奖
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设