SQL优化心得

因为一直追随着微软,所以数据库都是用的SQL Server。之前围绕SQL语句做过许多优化,有一些心得可以分享出来。

SQL优化前,需先掌握以下知识:

 

不要急着一上来就看执行计划加索引,先精简代码,采用最优化写法。保证SQL结构稳定后,再分析执行计划。

一、SQL

  1. 去掉多余字段的查询
  2. 复杂计算可以放在后面做,不必在取数时一次到位
  3. 小表关联大表,虽然inner join时sql server会自己排列匹配,但养成个好习惯吧
  4. 不要一次性拼大段SQL,不利于分析维护
  5. 能用inner join不要用left join,对于inner join,sql server会自己做过滤条件和join顺序的优化
  6. 减少物理表操作,过滤后放到临时表
  7. 少用函数,当然标量值的函数计算是可以的
  8. 数据更新操作不要排序,又不是查询
  9. 用OUTER APPLY(CROSS APPLY )代替LEFT JOIN(INNER JOIN) + GROUP BY,执行计划更简洁,代码更清晰
  10. 不要做多余的过滤和关联,因为这样可能导致索引无法使用

二、索引

  1. 关注执行计划中占比大的步骤
  2. 按外键和常用过滤条件加索引
  3. 执行计划中给出的“缺少索引”的建议,不一定适用其它上下文环境,应分析取舍
  4. 建索引前先查询分析已有索引,避免冗余索引
  5. 大数据量的表,INCLUD列不要过多,增删改会Hold不住的 。除非性能瓶颈可酌情考虑
  6. 不是所有非最优执行计划(聚集索引扫描等)都需要加非聚集索引替代的,考虑实际情况
  7. 注意索引列顺序,第1列最重要,因为“统计信息 ”是根据第1列来分析的

三、建表

  1. 主键不用的话,就不要用有序GUID了,批量插入很慢的
  2. 建表时就加上索引,特别是外键索引,不要再亡羊补牢了

 

  补充资料
  1. https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/cc280361(v=sql.105)
  2. https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2005/ms190610(v=sql.90)
  3. https://note.youdao.com/share/?id=01aef61b0e57dfd7bee091544c2a7489&type=note#/

转载于:https://www.cnblogs.com/linys2333/p/10009540.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值