• ORACLE SQL机能优化系列(七)


       起原:网海拾贝




    12.       只管多运用COMMIT

    只需有可以大约,在次序中只管多运用COMMIT, 这样次序的机能获得提高,需求也会由于COMMIT所开释的资源而镌汰:

     COMMIT所开释的资源:

    a.       回滚段上用于规单数据的信息.

    b.       被次序语句获得的锁

    c.       redo log buffer 中的空间

    d.       ORACLE为经管上述3种资源中的内部耗费

    (译者按: 在运用COMMIT时必须要留意到事宜的完整性,现实中遵守和事宜完整性每每是鱼和熊掌不成得兼)

    13.       较劲争论纪录条数

         和普通的见地相反, count(*) 比count(1)稍快 , 虽然假定可以议决索引检索,对索引列的计数照旧是最快的. 比方 COUNT(EMPNO)


    (译者按: 在CSDN论坛中,已经对此有过相称强烈热闹的讨论, 作者的见地并不非常切确,议决现实的测试,上述三种方法并没有显著的机能不同)


    14.       用Where子句替换HAVING子句

         阻止运用HAVING子句, HAVING 只会在检索出一切纪录之后才对成果集举行过滤. 这个处置须要排序,总计等把持. 假定能议决WHERE子句限制纪录的数量,那就能镌汰这方面的开支.


    比方:


         低效:

         SELECT REGION,AVG(LOG_SIZE)

         FROM LOCATION

         GROUP BY REGION

         HAVING REGION REGION != ‘SYDNEY’

         AND REGION != ‘PERTH’

         高效

         SELECT REGION,AVG(LOG_SIZE)

         FROM LOCATION

         WHERE REGION REGION != ‘SYDNEY’

         AND REGION != ‘PERTH’

         GROUP BY REGION

    (译者按: HAVING 中的条件普通用于对一些集合函数的比照,如COUNT() 等等. 除此而外,普通的条件应该写在WHERE子句中)

    15.       镌汰对表的盘考


    在含有子盘考的SQL语句中,要特别留意镌汰对表的盘考.

    比方:


         低效

              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)

         Update 多个Column 例子:

         低效:
               UPDATE EMP

               SET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES),

                  SAL_RANGE = (SELECT MAX(SAL_RANGE) FROM EMP_CATEGORIES)

               WHERE EMP_DEPT = 0020;

        高效:

               UPDATE EMP

               SET (EMP_CAT, SAL_RANGE)

     = (SELECT MAX(CATEGORY) , MAX(SAL_RANGE)

     FROM EMP_CATEGORIES)

               WHERE EMP_DEPT = 0020;




    版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追查法律责任。

  • 相关阅读:
    PHP实现bitmap算法
    c++高性能web框架drogon入门教程五:实例小项目,web和api实例代码
    c++高性能web框架drogon入门教程四,orm使用,csp使用
    c++高性能web框架 drogon入门教程三 控制器和数据库客户端使用
    c++高性能web框架drogon入门教程二 windows10下安装drogon,配合vscoede搭建开发环境
    关于tiobe编程语言排行榜的开发语言排名有什么实际作用吗?
    Effective C++的50条建议
    php-cli命令行选项
    php调用kafka消息队列
    php调用rabbitmq实现订单消费队列,和延时消费队列
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1976086.html
Copyright © 2020-2023  润新知