sql 34条款 记到多少

第一条
  选基础表 或 交叉表
第二条 
  表之间的连接应在其它条件之前
第三条
  直接指名要查的字段
第四条
  减少访问库的次数 (废话)
第五条
  重设ARRAYSIZE 一般不理会
第六条
   使用DECODE 这个还有回顾一下 写个博记录一下
第七条
   整合简单的无关联的查询
第八条
   删除重复记录 这个搞定
第九条 
   用TRUNCATE 替代delete 没什么机会用
第十条 
  尽量多commit 早点释放资源
第十一条 
  用where 替换 having 这个熟
第十二条 
子查询时不要重复查询
  SELECT  TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = ( SELECT 
TAB_NAME,DB_VER FROM  TAB_COLUMNS  WHERE  VERSION = 604)
 这个写法再看看  
第十三条
  多用内部函数解决问题
第十四条 
  使用表的别名 减少语法错误
第十五条 
  exists替代IN  子查询时注意了
第十六条
  高级点的东东 
  识别'低效执行'的SQL语句: 
虽然目前各种关于SQL优化的图形化工具层出不穷,但是写出自己的SQL工具来解决问题始终是一个最好的方法: 
SELECT  EXECUTIONS , DISK_READS, BUFFER_GETS, 
ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio, 
ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run, 
SQL_TEXT 
FROM  V$SQLAREA 
WHERE  EXECUTIONS>0 
AND  BUFFER_GETS > 0 
AND  (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8 
ORDER BY 4 DESC; 神马意思 再回头看看
第十七条
  关于索引 去掉不必要的索引 如不常查询的字段 
  小表不加索引也行吧 加上也没事 update insert 平摊了嘛
  
第十八条
  exists 替换distinct
  SELECT DISTINCT  DEPT_NO,DEPT_NAME  FROM  DEPT D , EMP E 
WHERE  D.DEPT_NO = E.DEPT_NO 
(高效): 
SELECT  DEPT_NO,DEPT_NAME  FROM  DEPT D  WHERE EXISTS ( SELECT ‘X' 
FROM  EMP E  WHERE E.DEPT_NO = D.DEPT_NO); 
也就是说 内连接后去重 和子查询 用exists之间的差别
第十九条
   sql语句写成大写的 oracle会自动转成大写 省掉它
   
第二十条 
   神马东东
第二十一条
    避免 在索引上 使用not 。。。
第二十二条
    避免在索引上 使用 计算 (通常列也不要吧)
第二十三条 
    用>=替代 >
区别 。。。。。 
第二十四条
用 union 替换 or  只在索引列有效 
第二十五条
    用in来替换 or 
低效: 
SELECT…. FROM LOCATION WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30 
高效 
SELECT… FROM LOCATION WHERE LOC_IN  IN (10,20,30); 
  这个要记一下 经常不这样搞
  
第二十六条
   避免在索引列上使用 is null   is not null 
   低效: (索引失效) 
SELECT … FROM  DEPARTMENT  WHERE  DEPT_CODE IS NOT NULL; 
高效: (索引有效) 
SELECT … FROM  DEPARTMENT  WHERE  DEPT_CODE >=0; 
第二十七条
  总是使用索引的第一个列??  意思是多列索引时情况?
  
第二十八条
  用UNION-ALL 替换UNION ( 如果有可能的话 注意区别哦)
  
第二十九条
  ORDER BY 子句只在两种严格的条件下使用索引. 
ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序. 
ORDER BY中所有的列必须定义为非空. 
WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列. 
例如: 
表DEPT包含以下列: 
DEPT_CODE PK NOT NULL 
DEPT_DESC NOT NULL 
DEPT_TYPE NULL 
低效: (索引不被使用) 
SELECT DEPT_CODE FROM  DEPT  ORDER BY  DEPT_TYPE 
高效: (使用索引) 
SELECT DEPT_CODE  FROM  DEPT  WHERE  DEPT_TYPE > 0 
第三十条
  避免改变索引列的类型 即转换比较条件类型 以匹配索引类型 
  
第三十一条 
  索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中. 
  != 将不使用索引
  
第三十二条
    如果检索数据量超过30%的表中记录数.使用索引将没有显著的效率提高. 
第三十三条
     避免使用耗费资源的操作
带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY
。。。怎么么替换。。。
第三十四条
  优化group by  上面说过了 先通过where 过滤
  
原文地址:https://www.cnblogs.com/heling/p/2610511.html