最近因工作需要,查找资料整理了一下sql的常见优化,具体如下:

1.尽量避免全表扫描,一般在where或order by 涉及的列上建立索引;

2.尽量避免在where子句中对索引字段进行null值判断,否则会导致引擎弃用索引而进行全表扫描;
   select id from table where num is null;
   可以在num表字段设置默认值为0,且为非空字段,然后sql修改为:
   select id from table where num =0;

3.尽量避免在where条件中对索引字段使用!=或<>,否则会导致全表扫描;

4.尽量避免在where条件中对索引字段使用or,否则会导致全表扫描;
   如:select id from table num =10 or num = 20;
   可以修改为
   select id form table num =10
   union all
   select id form table num =20;

5.in 和not in慎用,否则会导致全表扫描;
   如:select id from table where num in (1,2,3);
  可修改为:select id from table where num between 1 and 3;

6.慎用like '%%',否则会导致全表扫描;
  如:select id from table where name like '%abc%';

7.尽量避免在where后对索引字段字段进行表达式操作,否则会导致全表扫描;
   如:select id from table where num/2 = 20;
  可修改为: select * from table num = 20*2;

8.尽量避免在where后对索引字段进行函数操作,否则会导致全表扫描;
   如:select id from table where substring(name,1,3) = 'abc';
   可修改为:select id from table where name like 'abc%';

9.对索引字段不要在where子句中“=”左边进行函数,算术运算或其他表达式运算,否则会导致全表扫描;
   如:select id from table where num+1=5;
   可修改为:select id from table where num = 5-1;

10.尽量避免没必要的查询,
如:select col1,col2 into temp_table from table where 1=0;
可修改为:create table temp_table(需要的table表列);

11.尽量使用exists 代替 in;
   如:select num from tableA where num in (select num from tableB);
  可修改为:select num from tableA where num exists (select 1 from tableB where tableB.num =tableA.num);

12.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间,
    其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些;

13.避免使用 select * from t,用具体的字段列表代替“*”,不要返回用不到的任何字段;

14.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table 

 ,然后 drop table ,这样可以避免系统表的较长时间锁定;

15.统计查询数据条数尽量避免用count(*);
    如:select count(*) from table;
    应修改为: select count(1) from table;

16.在可以使用UNION ALL的语句里,尽量避免使用了UNION,因为UNION 会将各查询子集的记录做比较,
    故比起UNION ALL ,通常速度都会慢上许多;

17.慎用distinct关键字,因为distinct会对数据进行比较,过滤掉重复数据,需要耗费对应的时间;

18.insert into select批量插入,尽量避免一个个循环插入。

难免会有疏漏,如果发现请即使指出,谢谢!

sql常用优化的更多相关文章

  1. MySQL基础操作&&常用的SQL技巧&&SQL语句优化

    基础操作     一:MySQL基础操作         1:MySQL表复制             复制表结构 + 复制表数据             create table t3 like t ...

  2. php面试专题---MySQL常用SQL语句优化

    php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...

  3. MySQL常用SQL语句优化

    推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要 ...

  4. SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因

    复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过 ...

  5. SQL性能优化常见措施(Lock wait timeout exceeded)

    SQL性能优化常见措施 目 录 1.mysql中explain命令使用 2.mysql中mysqldumpslow的使用 3.mysql中修改my.ini配置文件记录日志 4.mysql中如何加索引 ...

  6. SQL性能优化案例分析

    这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享. 这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集 ...

  7. sql的优化相关问题

    这篇文章写的真心不错,值得仔细拜读,所以将其转载过来了. 一.             分析阶段 一 般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性.可用性.可靠性.安全性需求往往吸引 ...

  8. ORACLE性能优化之SQL语句优化

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   操作环境:AIX +11g+PLSQL 包含以下内容: 1.  SQL语句执行过程 2.  优化器及执行计划 3.  合 ...

  9. SQL索引优化

    序言数据库的优化方法有很多种,在应用层来说,主要是基于索引的优化.本次秘笈根据实际的工作经验,在研发原来已有的方法的基础上,进行了一些扩充,总结了基于索引的SQL语句优化的降龙十八掌,希望有一天你能用 ...

随机推荐

  1. 新Eclipse安装与配置 【来源网络根据实际情况自己补充】

    [第一次更新:20161108:http://blog.csdn.net/vvanity/article/details/51036678] Eclipse的官网地址:http://www.eclip ...

  2. CF1114F Please, another Queries on Array?

    CF1114F Please, another Queries on Array? 考虑用线段树维护取模后的区间积和真正的区间积所含有的质因子. 每次询问查得这两个值后,一乘一除,即可算出该区间积的欧 ...

  3. CDQ分治--用时间降维的美丽算法

    CDQ分治–用时间降维的美丽算法 CDQ分治,网上的阐述很多,太专业性的文字我就不赘述,这里指谈谈自己的感受 还是%一下CDQ大神的论文 CDQ分治的主要想法就是降维(比如三维问题降维到二维问题),并 ...

  4. 为什么委托的减法(- 或 -=)可能出现非预期的结果?(Delegate Subtraction Has Unpredictable Result)

    当我们为一个委托写 -= 的时候,ReSharper 会提示“Delegate Subtraction Has Unpredictable Result”,即“委托的减法可能出现非预期的结果”.然而在 ...

  5. 揭示同步块索引(中):如何获得对象的HashCode

    转自:http://www.cnblogs.com/yuyijq/archive/2009/08/13/1545617.html 题外话:为了尝鲜,也兴冲冲的安装了Win7,不过兴奋之余却郁闷不已,由 ...

  6. 高度注意 Map 类集合 K/V 能不能存储 null 值的情况

    集合类 Key Value Super 说明 Hashtable 不允许为 null 不允许为 null Dictionary 线程安全 ConcurrentHashMap 不允许为 null 不允许 ...

  7. Git与github常用命令

    Git项目与github建立联系 首先,需要在github上建立一个repository mkdir github-project cd github-project git init 此时githu ...

  8. Matlab 之 FFT的理解和应用

    网上看了一些大牛的关于FFT的见解,加上自己的一点儿理解,针对以下这几个问题来加深对FFT的理解. 不知道大家有没有类似以下几点的困惑: 问题的提出 对于1秒钟输出的连续信号,使用采样率Fs不同,就会 ...

  9. 2019Falg

    2019的Flag 2018 2018年对我来说是很重要的一年. 毕业--拿到硕士学位. 工作---成功转行进入互联网行业. 有了她. 上半年忙碌于毕业的各种事情,被毕业论文折磨的要疯,顺利走完所有流 ...

  10. CentOS6.5安装中文支持

    本人在安装CentOS6.5时选择是英文版,安装后打开文档,发现好些文档成了乱码了. 这个问题的原因是没有中文支持. 解决方法: 1.安装中文支持包 # yum groupinstall " ...