#SQLServer优化-实践(一)
##1.只查询有用的数据

  • 横向来看,不要返回自己不需要的列,尽量不要使用select *
  • 纵向来看,不要返回自己不需要的行,尽量使用where条件来过滤自己需要的内容
  • 考虑使用top
  • 考虑使用分页
  • 对于聚合查询,可以用having子句进行进一步的过滤

2.避免重复的SQL操作

  • 避免同一SQL语句多次执行,业务上严格控制不必要的逻辑

3.建议使用别名

  • 多表链接,使用别名,提高解析速度,避免列名歧义引发的语法错误
  • 即便不命名别名,SQLServer也会给它一个别名,所以手动显示命名可以提高解析速度
    ##4.禁用隐式转化
  • 类型匹配,特别是字符型和数值型。
  • varchar类型和nvarchar类型也是隐式转化,容易忽略。
    ##5.union all 优于 union
  • 列是相同的,包括列的类型、列的顺序、列的数量
  • 区别:union是在union all的基础上,删除重复的记录。
  • 如果允许重复的记录或者查询除的数据本身没有重复记录,请使用union all
  • union有默认排序
  • UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果
  • UNION ALL只是简单的将两个结果合并后就返回
    ##6.Like操作符
  • 明确左侧内容时,左侧不应使用“%”通配
  • 左侧使用“%”通配,不会执行索引查找,造成性能问题
    ##7.避免对索引字段使用运算或者函数表达式
  • 把对字段的运算转换为对比较值的运算(索引扫描和索引查找)
  • 尽量避免where子句使用函数
  • 尽量避免order by子句使用表达式
  • 限制在group by子句钟使用表达式
  • 因为使用表达式后,可能不能正确使用索引
Converting the parameter value instead
Bad: DATEDIFF(DAY,LogTime,'2012-01-01')=0
Good: LogTime >= '2012-01-01 00:00:00' and LogTime< '2012-01-02 00:00:00'

##8.绑定变量

  • 绑定变量会重用执行计划
  • 对于操作特定的行时,建议使用绑定变量
  • 但对于每次操作的行数不固定时,数据库查询优化器可能会产生不同的执行计划,以最优效率执行sql
  • 如果是使用绑定变量,重用了执行计划,将会导致效率降低(增加IO开销)
  • 所以尽量参数化来实现
  • 参数嗅探是我第一次接触到这个概念的知识
  • 参数嗅探参考链接一
  • 参数嗅探参考链接二
    ##9.批量执行SQL
  • 批量插入数据时,为了减少与数据库交互测试,可以每句sql后面加";"
  • 最前加"begin",最尾加"end"
begininsert into tableA(…) values ([values1]);insert into tableA(…) values ([values2]);……                                             ;insert into tableA(…) values ([valuesn]);end;

##10.使用临时表减小与大数据量表的关联

  • 与大数据量表关联,性能较差,建议先把数据提取出来存储到临时表中,之后使用临时表处理
    ##11.空、空格、null
  • ‘’‘与’ '相同,与null不同
  • ’<>'是查询不出null值的
    ##12.不要在分布式事务中使用ddl
  • 在分布式事务中执行创建表、删除表、Truncate表等ddl语句,会带来错误
  • 数据库模式定义语言DDL(Data Definition Language),是用于描述数据库中要存储的现实世界实体的语言
  • 数据库模式定义语言并非程序设计语言,DDL数据库模式定义语言是SQL语言(结构化查询语言)的组成部分。
  • SQL语言包括四种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML),数据控制语言(DCL)和事务控制语言(TCL)
    ##13.NON-SARG(函数,列运算等)
  • SARG:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。SARG 包含常量描述式(或是可以解析成常量的变量)来与数据表中的字段做比较。
  • 格式:
    列名 操作符 <常数 或 变量>

    <常数 或 变量> 操作符 列名
  • 列名出现在操作符的一边,而常量或变量出现在另一边。如果列名同时出现在操作的两边就不算是SARG。
  • SARG包含以下操作符=、>、<、>=、<=、BETWEEN及部分情况下的LIKE。LIKE是否符合SARG,要看通配符%所在的位置。例如:LIKE '胡%‘就是符合SARG,但是’%胡’就不符合SARG。因为以通配符开头无法限制SQL SERVER查询记录的数量,索引的摆放依然是以小到大,或以大到小顺序排列,如果以通配符“%”开头就无法利用有序的结构,以二分法来快速查找数据。
  • 简言之,在查询子句中,SARG代表用来查找的常量或变量可以直接与索引键值进行比较

createtime:2018-08-13

SQLServer优化-实践经验相关推荐

  1. 做自适应网站专业乐云seo_乐云分享新站SEO优化实践经验,收录和排名持续稳定上升方...

    新站在收录和排名上都会经过一个漫长的过渡期,也就是我们常说的"观察期",如何在短时间内通过搜索引擎的漫长考察是每一个做优化的人追求的目标.对于百度搜索引擎来说,收录同行都非常快,更 ...

  2. 微博的MySQL数据库优化实践经验

    数据库是所有架构中不可缺少的一环,一旦数据库出现性能问题,那对整个系统都会来带灾难性的后果.并且数据库一旦出现问题,由于数据库天生有状态(分主从)带数据(一般还不小),所以出问题之后的恢复时间一般不太 ...

  3. Java基础学习总结(135)——Java代码性能优化实践经验再总结

    前言 代码优化的最重要的作用应该是:避免未知的错误.在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最后往往是一个非常小的原因.然而为了解决这个 ...

  4. lwip协议栈优化_干货分享 | KNI性能优化实践

    友情提示:全文5000多文字,预计阅读时间15分钟 文章源自现网实践对支撑及用户态/内核态网络报文交换场景的认识,欢迎有Linux/FreeBSD内核.网络协议栈.DPDK优化实践经验的同学留言探讨- ...

  5. Go在迅雷P2P连通系统中的性能优化实践-朱文

    目 录 1. 如何构建压测环境 2. 如何分析性能瓶颈 3. 如何做性能优化 语言层面 设计层面 4. 总结 主要内容 我是来自迅雷的后台开发架构师,今天很高兴给大家分享一下我在迅雷连通系统中的性能优 ...

  6. 微信 Android 终端内存优化实践

    前言 内存问题是软件领域的经典问题,平时藏得很深,在出现问题之前没太多征兆.而一旦爆发问题,问题来源的多样.不易重现.现场信息少.难以定位等困难,就会让人头疼不已. 微信在过去 N 多的版本迭代中,经 ...

  7. 【活动预告】数据集成海外专场Meetup:走进Shopee,聊透SeaTunnel优化实践

    ​ 优秀的数据集成能力能帮助企业最大限度挖掘数据价值,同时解决企业内部数据团队各系统口径不统一.数据交互难.缺乏统一的数据集成平台等痛点问题. 而SeaTunnel不仅在Spark和Flink之上运行 ...

  8. DL之CNN:卷积神经网络算法应用之卷积神经网络实践技巧(DA/DP/WI/BN/H/O/R)、优化技术经验之详细攻略

    DL之CNN:卷积神经网络算法应用之卷积神经网络实践技巧(DA/DP/WI/BN/Hyperparameter/Overfitting/Regularization).优化技术经验之详细攻略 目录 卷 ...

  9. Java性能优化实践:分享Java性能优化的实践经验

    Java性能优化是一个非常重要的话题,在现代软件开发中扮演着至关重要的角色.在本篇博客中,我将分享一些Java性能优化的实践经验,包括使用JavaProfiler分析程序性能.使用JMH进行基准测试. ...

最新文章

  1. 百度翻译十年:语种全球首破200大关,质量提升30个百分点,每天翻译超千亿字符...
  2. 使用Redis实现在线点赞系统
  3. 76. Leetcode 295. 数据流的中位数 (堆-技巧一-固定堆)
  4. Python 最佳实践
  5. xlrd.biffh.XLRDError: Excel xlsx file; not supported报错
  6. Mysql查看和修改时区
  7. Cannot start compilation:the output path is not specifired for module “xxx“.Specify the output path
  8. 学习如何写PHP MVC框架(1) -- 路由
  9. hdu java_HDU Java8 集锦
  10. 4~20mA电流输出芯片XTR111完整电路(转)
  11. 困扰多年的PCB散热问题终于可以解决了!
  12. 笨办法学 Python · 续 练习 52:`moreweb`
  13. 【招聘内推】推荐策略产品经理-阿里文娱优酷产品直招
  14. Python使用matplotlib可视化模拟家庭支出情况雷达图
  15. 小白可以来看看磁盘与文件管理实验
  16. web3应用与dApp理解
  17. 计算机基础知识教程页码,如何设置word文档页码从任意页开始
  18. 手机什么软件测试打字速度,有什么软件是测试打字速度的,介绍个给我啊
  19. QML使用ShaderEffect绘制波纹
  20. 北洋大讲堂之“斯凯网络CEO宋涛-我的创业之路”感想

热门文章

  1. 夜神android模拟器怎么连接eclipse
  2. 【LeetCode 二叉树专项】二叉树的序列化与反序列化(297)
  3. 2019年全国大学生电子设计竞赛获奖名单
  4. linux quotacheck命令参数及用法详解---Linux系统管理
  5. 虚拟同步发电机转动惯量和阻尼系数协同自适应控制策略
  6. rs232接口_3分钟带你了解RS232、RS485、RS422转换器,网友:这次总算明白了
  7. 阅读pvt v1 和 pvt v2 论文笔记
  8. laravel 上传图片 或word或excel储存不了后缀
  9. vue 实现可控圆形 + 样式的绑定
  10. 基于STC89C52RC芯片设计的一款酒店服务机器人(包含货物检测、二维码识别功能)