数据库调优

没有最大吞吐量
合理的预期
资源问题

目标: 通过一系列的手段使得系统协调、平衡的运作,实现资源利用最大化

阻塞运算符和非阻塞运算符
逻辑运算符和物理运算符
数据访问运算符

  • 堆表
  • 聚集索引表

扫描运算符

  • 表扫描
  • 聚集索引扫描
  • 非聚集索引扫描

查找运算符
索引没有覆盖,性能就有问题

  • 聚集索引查找
  • 非聚集索引查找

关联运算符

  • join, 嵌套循环

合并连接
哈希连接(散列连接)

聚合运算符

  • min
  • max
  • sum
    逻辑运算符
    物理运算符 ,流聚合,哈希聚合

健壮的查询sql语句

select语句组成部分

  • 需要查询的表
  • 查询的字段
  • 查询出符合哪些特定条件的数据
  • 对数据进行排序、汇总等操作
select * 
from Person.Address as a
join Person.StateProvince as sp
on a.StateProvinceID=sp.StateProvinceID
where sp.Name='Colorado';

问题:

  • 查询了所有字段,影响查询效率
  • 没有限定结果集 ,可以分页 ,top,

总结:

  • 不要插where字段里面进行计算
  • where字段里面尽量使用索引,
  • 可以针对不同查询语句一起查询,对比查询计划
  • Orderby字句性能取决于参与排序操作的数据量的大小
  • 执行计划根据查询语句可能会提示创建索引
  • 排序会产生中间数据,存储在tempdb,tempdb所有数据库共享,避免tempdb会占用大量磁盘,尽量使用有索引的字段排序
  • 分组统计,也会使用排序,可以考虑创建索引
  • 索引不能太多,也要取舍

健壮的update语句

update会创建锁

健壮的delete语句

delete会创建排他锁, 也会操作索引,会记录日志
大量数据删除 会有性能影响

总结

合理的判断因素

  • 是否有合适的索引可供使用
  • 字段是否有函数计算
  • 返回结果集是否过大
  • 是否仅查询出需要的字段

关联查询(多表查询)

嵌套循环是较好的查询方式
给大表创建索引较为划算
嵌套循环需要 字段都有索引
合并连接, 使用一个表的索引
哈希连接,两个表都没索引,可考虑其中一个表创建索引
嵌套性能最好, 哈希最差,
不同情况 给大表 或者小表增加索引 提升性能

子查询

  • 子查询尽量集中在where字句中,方便阅读
  • 在一个语句中,子查询数量不超过3个,整个语句设计的表不超过5个
  • 避免在子查询中对大量的数据进行汇总或者排序操作
  • 尽量缩小子查询中可能返回的结果集,涉及的数据量尽可能小
  • 尽量使用确定的判断符号 =,in,exist ,避免使用any,all
    执行计划一样,性能一样

sqlserver 2017 以上自动优化
查询存储
强制执行计划
自动优化
候选执行计划

持续监控,自学习,验证 完成自动优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值