部分SQL优化

1.表名顺序:不影响业务逻辑情况下,一般情况下大表在左,小表在右;三表以上出现交叉表,则交叉表在前。
2.WHERE子句顺序:执行顺序ORACLE由右到左,效率基本相同;
3.JOIN表的右表条件尽量写在ON中,不要在WHERE之后(注:使用左连接两者是有区别的);
4.多个大表的JOIN尽量先分页再连接;
5.避免全表扫描:
  5.1 避免对索引列进行函数或是表达式操作;
  5.2 索引列最好是not null列,使用is not null 永远不会使用索引列,is null有时也不会使用;
  5.3 避免使用<> != 不等于操作符,会限制索引,引起全表查询;
  5.4 '%A%','%A' 不使用索引, 'A%'使用索引;
  5.5 非索引列使用OR查询会导致全表查询;
  5.6 使用not in 不会使用索引,用not exists 或者(外连接+条件)替代;

6.查询结果中避免使用“*”, 用count(0)替代count(*);
7.使用表的别名来避免列相同查询错误。
8.使用>=替代>; a1 = a2*100 替代a1/a2=100;datetime =to_char('20121122','yyyymmdd') 替换  to_char(datetime,'yyyymmdd') = '20121122'
9.使用union 替换 or; exists(或外连接)替换 in;(注: in 中个数如果是char<100,int<1000个效果可以,否则必须要用其他替代);

原文地址:https://www.cnblogs.com/xuxian/p/4001532.html