zoukankan      html  css  js  c++  java
  • SQL Trainning 总结

    SQL Trainning 总结
    1,Oracle 使用索引更快的遍历表,如果SQL不合理,就会造成优化器删去索引而使用全表扫描,这种SQL就是劣质SQL。
    1.不要要Oracle 做的太多;
         1)避免复杂的多表关联;
         2)避免使用*;
         3)避免使用好用资源的操作:Distinct、UNION、MINUS、INTERSET、ORDER BY 等。
              使用EXISTS 替换 DISTINCT
              使用Union ALL 替代UNION(如果必要)
              

    2.给优化器以明确的命令;
         自动选择索引
         至少要包含组合索引的第一列
         避免在索引上使用函数
         避免使用前置通配符
         避免在索引列上使用NOT
         避免在索引上使用Is NULL 和 IS NOT NULL
         避免出现索引列自动转换
         在查询时尽量少用格式转换
         
         
    3.减少访问次数;
         使用DECODE 来减少处理时间
         减少对表的查询
                 低效
              SELECT TAB_NAME
              FROM TABLES
              WHERE TAB_NAME = ( SELECT TAB_NAME
                                    FROM TAB_COLUMNS
                                    WHERE VERSION = 604)
              AND DB_VER= ( SELECT DB_VER
                               FROM TAB_COLUMNS
                               WHERE VERSION = 604)
         高效
           SELECT TAB_NAME
              FROM TABLES
              WHERE  (TAB_NAME,DB_VER)
              = ( SELECT TAB_NAME,DB_VER)
                       FROM TAB_COLUMNS
                       WHERE VERSION = 604)   
    4.细节上的影响。
         WEHRE 字句应该将筛选、返回结果集小的放在最后;
         WHERE字句使用合理的函数和表达式
         ORDER BY 使用索引列,没有的要建立,
         联结列不使用索引
         通配符的like 语句,不应该出现在词首
         WHERE 代替HAVING
         NOT Exist 〉 NOT IN 的效率,都不使用索引
         >= 代替 >
         例子:
    select * from employee where salary <> 3000;

    对这个查询,可以改写为不使用NOT:
    select * from employee where salary<3000 or salary>3000;
           
         外部链接的用法:

         外部联接"+"按其在"="的左边或右边分左联接和右联接。若不带"+"运算符的表中的一个行不直接匹配于带"+"预算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回。利用外部联接"+",可以替代效率十分低下的 not in 运算,大大提高运行速度。例如,下面这条命令执行起来很慢:

    select a.empno from emp a where a.empno not in

         (select empno from emp1 where job='SALE');

    利用外部联接,改写命令如下:

    select a.empno from emp a ,emp1 b
    where a.empno=b.empno(+)
    and b.empno is null
    and b.job='SALE';

         这样运行速度明显提高.
         
         多使用COMMIT,用TRUNCATE替代DELETE
         
         COUNT(*) > COUNT(1)
     






  • 相关阅读:
    document.ready和window.onload的区别
    那些年,我们坚持着。
    JavaScript去除前后空格
    男孩的梦
    shapefile格式说明及读写代码示例 http://www.gispower.org/article/arcgis/arcother/2008/48/0848115049GB922C13K2I22H7G06A4.html
    如何在C#中加载自己编写的动态链接库(DLL)http://www.kehui.net/index.php/article/read/30/26323
    对象复制
    影像复制程序集在不关闭应用程序的前提下更新程序集
    ibatisnet系列(一) 总览 http://hjf1223.cnblogs.com/archive/2006/04/24/383118.html
    创建项模板模板参数
  • 原文地址:https://www.cnblogs.com/hijushen/p/4234607.html
Copyright © 2011-2022 走看看