zoukankan      html  css  js  c++  java
  • 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 子句中的“=”左边进行函数. 算术运算或其他表达式运算,否则系统将可能无法正确使用索引
  • 相关阅读:
    [计算机网络] 互联网协议栈(TCP/IP参考模型)各层的主要功能及相应协议
    [计算机网络-应用层] P2P应用
    [剑指Offer] 45.扑克牌顺子
    [剑指Offer] 44.翻转单词顺序列
    [STL] 如何将一个vector赋给另一个vector
    最近更新少,是因为在用框架做项目
    转收藏:Git常用命令速查表
    CentOS常用指令
    CentOS修改服务器系统时间
    Javascript定时跳转
  • 原文地址:https://www.cnblogs.com/luo-jian/p/13570612.html
Copyright © 2011-2022 走看看