SQL慢查询原因及优化

SQL慢查询原因:

  1. 没有索引或者没有使用到索引
  2. I/O吞吐量小,形成了瓶颈效应
  3. 没有创建计算列导致查询不优化
  4. 内存不足
  5. 网络速度慢
  6. 查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
  7. 锁或者死锁
  8. sp_lock,sp_who,活动的用户查看,原因是读写竞争资源
  9. 返回了不必要的行和列(这里其实也和索引有关,如果不必要的行和列,没有用到索引造成了全表扫描,或者是这些行和列占用了锁,才会拖慢)
  10. 查询语句不好,没有优化

SQL语句优化:

  1. 尽量避免全表扫描,首先考虑在where和order by涉及的列上建立索引
  2. 尽量避免在where子句中对字段进行null值判断,会导致引擎放弃使用索引而进行全表扫描
  3. 尽量避免在where子句中使用!= 或 <> 操作符,会导致引擎放弃使用索引而进行全表扫描
  4. 应尽量避免在 where 子句中使用 or 来连接条件,会导致引擎放弃使用索引而进行全表扫描
  5. 应尽量避免使用 in 和 not in,会导致全表扫描,能用between就不要用in
  6. 全模糊查询也会导致全表扫描,可以考虑全文检索
    如:
     select id from t where name like %c%;
  7. 在 where 子句中使用参数,也会导致全表扫描,可以改为强制使用索引
    如:
     select id from t where num=@num ;
    改为:
     select id from t with(index(索引名)) where num=@num ;
  8. 尽量避免在 where 子句中对字段进行表达式操作, 这将导致引擎放弃使用索引而进行全表扫描
    如:
     select id from t where num/2=100;
    可以改为:
     select id from t where num=100*2;
  9. 尽量避免在 where 子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描
  10. 不要在 where 子句中的“=”左边进行函数. 算术运算或其他表达式运算,否则系统将可能无法正确使用索引

SQL慢查询原因及优化

上一篇:DM数据库的安装以及服务的注册


下一篇:spark 划分stage Wide vs Narrow Dependencies 窄依赖 宽依赖 解析 作业 job stage 阶段 RDD有向无环图拆分 任务 Task 网络传输和计算开销 任务集 taskset