位置: 编程技术 - 正文

SqlServer 索引自动优化工具(sqlserver怎么使用索引)

编辑:rootadmin
鉴于人手严重不足(当时算两个半人的资源),打消了逐个库手动去改的念头。当前的程序结构不允许搞革命的做法,只能搞搞改良,所以准备搞个自动化工具去处理。原型刚开发完,开会的时候以拿出来就遭到运维DBA团队强烈抵制,具体原因不详。最后无限延期。这里把思路分享下。欢迎拍砖。   整个思路是这样的,索引都是为查询和更新服务的,但是不合适的索引又会对插入和更新带来负面影响。面对表上现有的索引想识别那些是有效的不太可能。那么根据现有的数据使用情况重建所有的新索引不就解决了嘛。根据查询生成全新索引,然后和现有对比,不吻合的全部删除,原来没有的创建。虽然说对于正在运行的系统来说风险还是蛮大的。但是可以做临界测试嘛。    具体解决方案如下:   首先在热备的数据库服务器上定期抓取缓存的执行计划(原本想抓取SQL发现有些SQL实在掺不忍睹,没有自动化解析的可能性),然后连同该执行的执行次数即表的统计信息一起down到一个备用服务器的数据表中。   执行计划积累几次后,开始解析。由于执行计划是格式良好的XML文件,加上微软提供执行计划的XSD文件。我们可以反向推出各节点对应的SQL谓词(这个XSD到现在都没找到官方的说明,只能反向推出关联)。例如建立索引我们比较关心三类谓词,分别为:Select,Join,Where。 只要拿到这些我们就能建立良好的索引。原理很简单,Join和Where都是索引键的依据,而Select可以斟请添加到Index的Include中。      解析的时候也不是针对单个执行计划,而是将所有执行计划全分解后进行统计处理。好处就是能够知道那些表字段被引用的最多,那些是外键列。那些数据被反复查询。例如可以得出TableA的Col1列在一天的业务过程中被Join了W次,被Where2W次。而Col2则被Select了W次,仅仅被Where了次。这样我们建立索引的基础就是基于表的而不是基于单个查询的。最终生成的Index将权衡查询频率和查询的重要性,如果某个业务查询特别重要,但执行频率不高我们可以提供权重,优先建立索引。当然创建Index还要参考表的数据分布以决定Index中字段的顺序。   好了,准备工作完成,开始建索引。当前拥有的条件,表数据分布,表字段分别被查询引用次数(Select,Join,Where),以及这些SQL谓词出现的次数。根据这些如何创建索引开始的想法是逐个分析,考虑所有可能性然后创建。发现这种方式只适合人脑,让电脑做得先让电脑的智商增长到以上才有可行性。发现逆向思维这里同样大有用处,既然不能一下子创建最合适的,那我们就根据执行计划得出的组合创建所有的Index组合。凡是Join和Where都放到Index的Key里。例如:   select t1.A, t1.B, t1.C, t2.J, t2.k from Table1 t1 Join Table1 t2 on t1.A = t2.j Where t1.A = 'param' 草创的索引就是:   Index(A,B)includ(C) 和 Index(j)include(j,k) 关于Select如果是小数据类型且Alter的执行计划中该数据修改频率很小的都放到Include里去进去。大数据类型和修改比较频繁的就算了。这样我们剔除相互覆盖的。部分重叠的,部分重叠到底保留那一个参考执行频率和查询重要性。差异很小的就合并并为一个,如:   1.Index (A,B,C)Include(D)   2.Index(A,B,D)Include(C) 直接合并为:   Index(A,B)Include(C,D) 当然如果Alert的特别少也可以合并成Index(A,B,C,D)这个要参考C,D字段的修改频率。和主键重叠的剔除。这样留下的基本上就是我们需要的索引了。      对比现有索引进行甄别覆盖的过程就略过。简单的拉出来Create Index 进行解析处理就好了。发布的时候很简单。写个脚本在业务比较少的时候做Drop和Create就完成了。项目源代码因为设计到公司的保密问题就不上传了。一个注意的地方对于简单查询的SQL执行计划缓存的时候会比较短且一旦缓存不够就会被清理掉。要注意这些SQL的执行频率的误差。   SqlserverR2 XSD:    总结的节点映射列举如下:     查询sql执行计划都包含在节点“StmtSimple”中,如果没有这个节点一般就是其它类型的SQL的执行计划。     Join关联的节点和自身类型有关一般包含在Hash,Marger中,如何Join同时又是Where条件的话则会出现在SeekKey和Compare节点中,因为Join的列都是成对出现,这里很容易识别,有一个是参数(@开头)或常量(type="Const")则必定是Where条件。          Select最终输出字段比较容易找到,第一个OutputList节点就是。     需要注意的是有因为一般列每个ColumnReference都包含库名,表名,列信息,但是系统表则不会。注意剔除。

推荐整理分享SqlServer 索引自动优化工具(sqlserver怎么使用索引),希望有所帮助,仅作参考,欢迎阅读内容。

SqlServer 索引自动优化工具(sqlserver怎么使用索引)

文章相关热门搜索词:sql server索引的使用,sqlserver索引有什么用,sql server索引怎么用,sql server中索引类型包括哪些,sql server索引怎么用,sql server2012索引,sql server索引的使用,sqlserver的索引,内容如对您有帮助,希望把文章链接给更多的朋友!

优化 SQL Server 索引的小技巧 在本文中,我将说明如何用SQLServer的工具来优化数据库索引的使用,本文还涉及到有关索引的一般性知识。关于索引的常识影响到数据库性能的最大因

SQL server高级应用 收藏版 一.建库,建表,加约束.1.1建库usemastergoifexists(select*fromsysdatabaseswherename='MyDatabase')—判断master数据库sysdatagbases表中是否存在将要创建的数据库名dropdatabaseMyD

Sql Server 分页方法分析(offset and fetch) 其中offsetandfetch最重要的新特性是用来分页,既然要分析分页,就肯定要和之前的分页方式来比较了,特别是Row_Number()了,在比较过程中,发现了蛮多

标签: sqlserver怎么使用索引

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

上一篇:sqlserver 查询数据库大小的方法(sqlserver查询数据库数据量)

下一篇:优化 SQL Server 索引的小技巧(sqlserver优化方案)

  • 利润总额亏损还有没有所得税
  • 运输费劳务是否可以扣除
  • 没有购销合同的销售额交印花税吗
  • 用友t3采购订单怎么录入
  • 现金流量表现金流量项目明细分类
  • 个税申报表中的基本养老保险怎么填
  • 已认证红字信息表
  • 有限合伙企业应当
  • 库存现金怎么登记账簿
  • 财务报表季报申报报表要分开申报吗
  • 预收货款增值税纳税义务发生时间如何确定
  • 随意变更会计处理方法违背了
  • 企业合并的相关税费计入哪里
  • 个体工商户需要缴纳哪些税
  • 上年留抵税,次年抵扣分录
  • 附加税按实际缴纳计提吗
  • 调财务报表怎样调整
  • 换汇成本跟进项有关系吗
  • 脚手架出租生意
  • 增值税发票价税合计是什么意思
  • 计提城市建设维护税
  • 代扣代缴个人所得税手续费是否缴纳增值税
  • 小规模季度划分
  • 制造成本包括哪几项
  • 什么情况下从价计征房产税
  • uv价值是怎么计算公式
  • 母公司计提子公司投资收益
  • 税务增加办税人员怎么操作
  • 结算银行贷款利息用什么凭证
  • 去年的发票今年能用吗
  • 如何免费获取win11
  • 鸿蒙系统怎么关闭负一屏
  • php大量数据处理
  • PHP+Mysql+jQuery实现发布微博程序 php篇
  • 和linux
  • 买材料没发票怎么办
  • hotkey osd driver可以卸载吗
  • 无形资产出租属于处置吗
  • 房屋租赁如何开税票
  • 预支员工报销费用会计科目
  • 天窗漏进来的水去哪了
  • 旅游企业税务筹划
  • 短期借款产生的利息进入总账吗
  • 开发成本属于什么类型科目
  • 大数据投资发展有限公司
  • 什么是免抵调库税额
  • 当月已付款, 没收到发票怎么做账
  • mongodb 日志
  • 金蝶暂存凭证怎样转正常凭证
  • 土地租赁费属于什么收入
  • 解决mysql数据库异常断电
  • mysql服务器怎么启动
  • 房地产企业建成后先出租的房地产
  • 银行承兑汇票如果到期了企业没有兑付
  • 筹资现金流量净额
  • 用人单位延迟给员工交社保怎么办
  • 丁字账户例题及解析
  • 福利费可以计入销售费用吗
  • 一正一负发票要做凭证吗
  • 代别人公司发工资是工资薪金还是劳务报酬
  • 进项做成了销项怎么调账
  • 缴纳的车辆购置税需要计提吗
  • Win7系统连接vpn失败且提示错误代码868的2种解决方法
  • mac怎么打开访达功能
  • win7系统补丁包
  • win10怎样永久激活
  • 为什么电脑显示windows10即将终止服务
  • ubuntu命令行调节音量
  • 备份linux命令
  • 电脑安装win8系统
  • 仿客齐集首页导航条DIV+CSS+JS [代码实例]
  • [置顶]马粥街残酷史
  • js调用wsdl接口
  • js中...用法
  • Linux中删除文件夹的正确方式
  • python中类怎么用
  • 使用jquery的步骤
  • 房产税从价计征税率
  • 如何在个税app中设置企业登录密码
  • 如何查询有没有交医保费用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设