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#/
posted @ 2019-01-11 21:21  linys2333  阅读(204)  评论(0编辑  收藏  举报