1.  1IN 操作符   
  2.  
  3.   IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用INSQL
  4. 性能总是比较低的,从Oracle执行的步骤来分析用INSQL与不用INSQL有以下区别:  
  5.  
  6.   ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记
  7. 录,如果转换成功则直接采用多个表的连接方式查询。由此可见用INSQL至少多了一转换的过程。一般的
  8. SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。  
  9.  
  10.   推荐方案:在业务密集的SQL当中尽量不采用IN操作符,用EXISTS 方案代替。  
  11.  
  12.   2NOT IN操作符   
  13.  
  14.   此操作是强列不推荐使用的,因为它不能应用表的索引。   
  15.  
  16.   推荐方案:用NOT EXISTS 方案代替   
  17.  
  18.   3IS NULL IS NOT NULL操作(判断字段是否为空)   
  19.  
  20.   判断字段是否为空一般是不会应用索引的,因为索引是不索引空值的。
    IS NULL IS NOT NULL不能用NULL作为索引,任何包含NULL值的列都将不会被包含在索引中。即使索引
    有多列这样的情况下,只要这些列中有一列含有NULL,该列就会从索引中排除。也就是说如果某列存在空值,即使
    对该列建索引也不会提高性能。任何在WHERE子句中使用IS NULLIS NOT NULL的语句优化器是不允许使用索引的。
    故如果要在某字段上建索引,则该字段不能为空,可以用一个缺省值代替空值。
  1.   推荐方案:用其它相同功能的操作运算代替,如:a is not null 改为 a>0 a>’’等。不允许字段为空,
  2. 而用一个缺省值代替空值,如申请中状态字段不允许为空,缺省为申请。
    故如果要在某字段上建索引,则该字段不能为空,可以用一个缺省值代替空值。
  1.   4、> < 操作符(大于或小于操作符)   
  2.  
  3.   大于或小于操作符一般情况下是不用调整的,因为它有索引就会采用索引查找,但有的情况下可以对它进
  4. 行优化,如一个表有100万记录,一个数值型字段A30万记录的A=030万记录的A=139万记录的A=21万记
  5. 录的A=3。那么执行A>2A>=3的效果就有很大的区别了,因为A>2ORACLE会先找出为2的记录索引再进行比较,
  6. A>=3ORACLE则直接找到=3的记录索引。   
  7.  
  8.   5LIKE操作符   
  9.  
  10.   LIKE操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会
  11. 产生性能上的问题,如LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE X5400%’则会引用范围索引。   
  12.  
  13.   一个实际例子:用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号 YY_BH LIKE ‘%5400%’ 这个
  14. 条件会产生全表扫描,如果改成YY_BH LIKE X5400%’ OR YY_BH LIKE B5400%’ 则会利用YY_BH的索引进行两
  15. 个范围的查询,性能肯定大大提高。   
  16.  
  17.   6UNION操作符   
  18.  
  19.   UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复
  20. 的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:
  21.  
  22.   select * from gc_dfys
  23.  
  24.   union
  25.  
  26.   select * from ls_jg_dfys
  27.  
  28.   这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数
  29. 据量大的话可能会导致用磁盘进行排序。   
  30.  
  31.   推荐方案:采用UNION ALL操作符替代UNION,因为UNION ALL操作只是简单的将两个结果合并后就返回。  
  32.  
  33.   select * from gc_dfys
  34.  
  35.   union all
  36.  
  37.   select * from ls_jg_dfys  

SQL优化技术分析-1:操作符优化的更多相关文章

  1. [转]SQL语句优化技术分析

    一.操作符优化 1.IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用 ...

  2. SQL语句优化技术分析

    一.操作符优化 1.IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用 ...

  3. SQL语句优化技术分析 整理他人的

    一.操作符优化 1.IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用 ...

  4. SQL优化技术分析-3:SQL语句索引的利用

    使用索引来更快地遍历表.默认情况下建立的索引是非聚集索引,但有时它并不是最佳的.在非聚集索引下,数据 在物理上随机存放在数据页上.合理的索引设计要建立在对各种查询的分析和预测上.一般来说: 有大量重复 ...

  5. SQL优化技术分析-2:SQL书写的影响

    1.同一功能同一性能不同写法SQL的影响. 如一个SQL在A程序员写的为 Select * from zl_yhjbqk B程序员写的为 Select * from dlyx.zl_yhjbqk(带表 ...

  6. SQL优化技术分析-4:其他

    ORACLE的提示功能是比较强的功能,也是比较复杂的应用,并且提示只是给ORACLE执行的一个建议,有时如果 出于成本方面的考虑ORACLE也可能不会按提示进行.根据实践应用,一般不建议开发人员应用O ...

  7. SQL 语句优化—— (一) 操作符优化

    1.IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以 ...

  8. 优化技术之Android UI优化

    2013-06-30 UI 优化 在Android中,最常用LinearLayout表示UI的布局.比起LinearLayout,在资源利用上,RelativeLayout会占用更少的资源而达到相同的 ...

  9. MySQL优化 - 性能分析与查询优化(转)

    出处:  MySQL优化 - 性能分析与查询优化 优化应贯穿整个产品开发周期中,比如编写复杂SQL时查看执行计划,安装MySQL服务器时尽量合理配置(见过太多完全使用默认配置安装的情况),根据应用负载 ...

随机推荐

  1. EasyPR--开发详解(7)字符分割

    大家好,好久不见了. 一转眼距离上一篇博客已经是4个月前的事了.要问博主这段时间去干了什么,我只能说:我去“外面看了看”. 图1 我想去看看 在外面跟几家创业公司谈了谈,交流了一些大数据与机器视觉相关 ...

  2. ASP.NET MVC Model绑定(三)

    ASP.NET MVC Model绑定(三) 前言 看过前两篇的朋友想必对Model绑定有个大概的了解,然而MVC框架给我们提供了更高的可扩展性的提供程序编程模式,也就是本篇的主题了,会讲解一下Mod ...

  3. 关于安装安卓SDK出现无法更新问题时的解决办法

    近日,如果安装过安卓的同学可能知道,大家在使用Android SDK升级或者安装SDK的时候,出现了访问Failed to fetch URL http://dl-ssl.google.com/and ...

  4. ES6 新特性

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

  5. SQL:插入指定标识列的数据时候的小错误

    异常处理汇总-数据库系列  http://www.cnblogs.com/dunitian/p/4522990.html 后期会在博客首发更新:http://dnt.dkill.net 好久没写标识系 ...

  6. 【Win 10应用开发】手动调用WCF服务

    调用服务最简单的方法就是,直接在VS里面添加服务引用,输入服务的地址即可,无论是普通Web服务,还是WCF服务均可.VS会根据获取到的元数据,自动生成客户端代码. 如果服务的调用量很大,应用广泛,可以 ...

  7. 2. SVM线性分类器

    在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念.用一个二维空间里仅有两类样本的分类问题来举个小例子.如图所示 和是要区分的两个类别,在二维平面中它们的样本如上图所示.中间的直 ...

  8. c#如何判断webbrowser已经加载完毕

    最近有个小程序需要采集网页源代码,但有的网页中JS脚本又会生成额外的代码,比如http://www.cnblogs.com/lidabo/p/4169396.html 红框部分便是另外加载的代码. 此 ...

  9. AFNetworking 3.0 源码解读(二)之 AFSecurityPolicy

    在我们平时的开发中,对网络连接安全方面所做的努力,应该占据很重要的位置. 在解释AFSecurityPolicy之前,我们先把基础的http/https 知识简单的普及一下.获取这方面的信息可通过这本 ...

  10. JavaScript知识点总结(命名规范,变量的作用域)

    命名规范 有人说JavaScript的宽容性是这个语言最糟糕的方面之一.比如说想把2个数字加在一起,JavaScript会把其中一个数字解析成字符串,那么就会得到一个奇怪的字符串,而不是2个数字的和. ...