位置: 编程技术 - 正文

SQL Server 聚焦存储过程性能优化、数据压缩和页压缩提高IO性能方法(一)(sql聚合语句)

编辑:rootadmin

推荐整理分享SQL Server 聚焦存储过程性能优化、数据压缩和页压缩提高IO性能方法(一)(sql聚合语句),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:sql server中的聚合函数,sql聚合语句,sql的聚集函数,sql 聚合,sql server 聚集索引,sql的聚集函数,sql server常用的聚合函数,sql server 聚集索引,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

关于SQL Server基础系列尚未结束,还剩下最后一点内容未写,后面会继续。有园友询问我什么时候开始写SQL Server性能系列,估计还得等一段时间,最近工作也比较忙,但是会陆陆续续的更新SQL Server性能系列,本篇作为性能系列的基本引导,让大家尝尝鲜。在涉及到SQL Server性能优化时,我看到的有些文章就是一上来列出SQL Server的性能优化条例,根本没有弄清楚为什么这么做,当然也有可能是自己弄懂了,只是作为备忘录,但是到了我这里,我会遵循不仅仅是备忘录,还要让各位园友都能易于理解,不至于面试时只知道其果,不知其因。

存储过程性能优化

禁用受影响函数通过设置SET NOCOUNT ON

如上当我们进行查询时总是会返回受影响的行数,这种消息只是对于我们调试SQL时有帮助,其他再无其他帮助,我们可以通过设置 SET NOCOUNT ON 来禁用这个特性,这将有显著的性能提升,有利于减少网络流量的传输。在存储过程中我们像如下设置。

使用架构名称+对象名称

这个建议在开篇我们就已经明确讲过,通过设置架构名称的对象名称是最合格的,此时将直接执行编译计划而不是在使用缓存计划时还要去其他可能的架构中去查找对象。所以我们建议总是像如下使用。

存储过程名称禁止以sp开头

如果一个存储过程名称以sp开头,此时数据库查询引擎首先将在master数据库中去查找存储过程然后再是在当前会话的数据库中去查找存储过程。

使用IF EXISTS (SELECT 1) 而不是 (SELECT *)

网上随便一搜索就看到如下查询一行是否存在的SQL语句。

当判断一条记录是否在表中存在时我们使用IF EXISIS,如果在IF EXISTS中内部语句中有任何值返回则返回TRUE。如上述

此时将返回学号 = ''的这一行,而如果用1代替则不用返回满足条件的这一行记录,在查询时为了网络传输我们应该最小化处理数据,所以我们应该像如下做返回单值1.

使用sp_executesql而不是使用EXECUTE

sp_executesql支持使用参数而不是使用EXECUTE来提高代码重用,动态语句的查询执行计划只有对每个字符包括大小写、空格、参数、注释相同的语句才重用。如果利用EXECUTE执行如下动态SQL语句。

执行查询计划如下,如果再一次使用不同的@contactname值,此时查询执行计划将再次创建@contactname不会达到重用的目的

如果我们使用利用sp_executesql像如下查询,如果对于不同的@contactname值,此时查询执行计划将被会重用,将会达到提高性能的目的。

对于异常处理利用TRY-CATCH处理

SQL Server 聚焦存储过程性能优化、数据压缩和页压缩提高IO性能方法(一)(sql聚合语句)

在SQL Server 之后开始支持异常处理,如果我们进行异常语句检查处理,如果出现异常将不会导致利用更多的代码来消耗更多的资源和时间。

尽可能使事务简短

事务的长度会影响阻塞和死锁。直到事务结束排他锁不会释放,在高隔离级别中共享锁的生命周期更长, 因此,冗长的事务意味着锁定的时间更长,锁定的时间越长最终导致阻塞,在有些情况下,阻塞会转变成死锁,所以为了更快的执行、更少的阻塞,我们应该使事务的长度尽量简短。

数据压缩和页压缩提高IO

SQL Server主要的性能取决于磁盘IO效率,改善IO意味着提高性能,在SQL Server 中提供了数据和备份压缩功能。下面我们一起来看看。

数据压缩

数据压缩意味着磁盘保留的空间减少,数据压缩可以配置在表上的聚集索引、非聚集索引、索引视图或者分区表或者分区索引。数据压缩可以在两个级别中实现:一个是行压缩,另外一个是页压缩,甚至页压缩会自动实现行压缩,当通过CREATE TABLE、CREATE INDEX语句时会压缩表和索引,为了改变一个表、索引和分区的压缩状态通过 ALTER TABLE.. REBUILD WITH or ALTER INDEX.. REBUILD WITH语句实现。当一个堆栈的压缩状态改变后,此时非聚集索引将重建,在行压缩中,使用以下四种方法来消除未使用的空间。

1.减少记录中的元数据开销。

2.所有数字类型(INT、NUMERIC等)和基于数字类型(如DATETIME、MONEY)将会转换成可变长度值,例如INT类型在压缩后所有未被消耗的空间将会被回收。比如我们知道0-可以存储一个字节中,若我们的值是,在磁盘中INT是4个字节,但是在压缩之后其余3个字节将会被回收。

3.CHAR和NCHAR会转换成可变长度存储,在压缩之后对于实际存储的数据将不会再有空格,比如我们定义CHAR(),此时我们存储的数据为Jeffcky,默认情况下将会预留个字节,此时将会有3个字节为空格补充,但是在压缩之后这3个字节将会被回收,仅仅只预留7个字节。

4.所有NULL和0都已经过优化不需要字节。

页压缩

页压缩将会通过以下三种方法实现。

1.上述已经提到的所有。

2.前缀压缩:在每页上的每一列,被标识的所有行的公共值以及存储在标题下的每一行,在压缩之后公共值将替换为标题行的引用。

3.字典压缩:在字典压缩中,每一页中的每一列标识公共值,是将存储在标题行的第二行中,然后这些公共值将替换为新行中的值的引用。

说了这么多,具体到底是怎样使用的呢?请继续往下看,我们通过使用临时数据库插入条数据,如下:

接下来进行行压缩和页压缩来和原始未压缩进行比较看看。

结果如下:

压缩后数据显然变少了,如果数据量足够大页压缩比行压缩的数据会更少,从而减少IO提高性能,不知道看到本文的你是否在生产服务上是否已经应用过呢,下次可以试试。

以上所述是小编给大家介绍的SQL Server 聚焦存储过程性能优化、数据压缩和页压缩提高IO性能方法(一),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对积木网网站的支持!

Sql Server 完全卸载方法 只需8步轻松卸载 轻松通过八步实现SqlServer完全卸载,供大家参考,具体内容如下第一步,在控制面板里面找到程序——卸载程序这一项,打开之后就会是这样的了第

java连接mysql数据库 java连接sql server数据库 在java的应用中,我们经常会对数据库进行必要的操作,下来我们就了解一下如何用java连接mysql数据库以及java连接sqlserver数据库一、mysqlimportjava.sql.Connect

SQL去除重复记录(七种) 话不多说,请看代码:ifnotobject_id('Tempdb..#T')isnulldroptable#TGoCreatetable#T([ID]int,[Name]nvarchar(1),[Memo]nvarchar(2))Insert#Tselect1,N'A',N'A1'unionallselect2,N'A',N'A2'unionallselec

标签: sql聚合语句

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

上一篇:SQL查询中需要使用别名问题(sql查询必须在什么的基础上创建)

下一篇:Sql Server 2012完全卸载方法 只需8步轻松卸载(sqlserver2012完全卸载)

  • 工商年报已报网上还查不出来
  • 运输发票抵扣联丢了
  • 去年收到一张普票超范围了怎么办
  • 定额备用金与非定额备用金的会计分录
  • 其他综合收益属于损益类科目吗
  • 库存现金账务处理
  • 申请纳税申报怎么申报
  • 什么是外购类标签
  • 预提利息属于费用吗
  • 进项转出后还能转入吗
  • 城建税和教育费附加的计税依据是什么
  • 打印机的增值税率
  • 如何确定增值税
  • 优惠购房差价收益是否缴纳个人所得税?
  • 处置打包债权如何缴纳个人所得税?
  • 企业业务招待费标准规定
  • 企业收到固定资产投资时应按什么入账
  • 股票交易的印花税和手续费是多少
  • 成本费用利润率越高,说明企业盈利能力
  • 企业为员工支付房租交个税吗
  • 无形资产的出租租金通过什么科目核算
  • 月末是指
  • 跨年的费用冲回会计分录
  • 跟a签订合同可以撤销吗
  • 此应用无法在你的电脑上运行w11
  • 炫龙笔记本win10系统为什么没有关闭触控板
  • 销售折扣的税票怎么开
  • csinsmnt.exe进程的作用介绍 csinsmnt是什么进程
  • 寿命最短的苹果手机
  • php生成条形码的代码
  • 康沃尔郡的大学
  • 微信接口开发平台
  • 债券利息调整怎样计算
  • 土地抵减销项税 土地增值税
  • php动态语言
  • 写一个简单的php程序代码
  • php如何入门
  • 简单的php文件
  • tailf命令 查看100行
  • webserviceclient
  • 制造业属不属于第二产业
  • 小规模附加税减免性质代码如何选
  • 残保金最新
  • 职工保险报账
  • 收回以前年度多发奖金分录
  • 打开access自动弹出窗体
  • 保税仓发货的商品退货要承担税吗
  • 本年利润亏损还需要交所得税吗
  • 税前一次性扣除和100%加计扣除
  • 卖废品收入计入需要交税吗
  • 建筑业异地预交税款怎么入库
  • 发票收款人和复核人可以是一个人吗
  • 季度预缴企业所得税要交滞纳金吗
  • 利息收入如何入会计科目
  • 外购的商品赠送客人是否销售吗
  • 收不回来的应收账款会计分录
  • 小规模纳税人租赁发票税率是多少
  • 出纳现金业务流程图
  • 银行日记账的登记依据有哪些
  • 汇兑损益分录如何写
  • 购房发票可以开专票
  • 增值税结转到本年利润吗
  • 营改增后工程项目计价规则也随之发生了改变对错
  • 长期待摊费用什么时候结束摊销
  • centos7 samba服务器搭建
  • Mac Chrome打开HTTPS证书错误问题解决方法
  • linux readelf命令
  • windows intel
  • w10系统音量图标不能用了
  • node.js cookie-parser之parser.js
  • opengl metal
  • opengl编程实例
  • javascript基于什么的语言
  • nodejs详解
  • 七牛云和ucloud
  • 莱鸟人集团
  • 下载重庆税务官方app
  • 进项税跨月转出
  • 超市开发票每月额度,超了之后税率是多少
  • 平板电脑购物
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设