zoukankan      html  css  js  c++  java
  • Oracle SQL Tuning Overview

    Oracle执行SQL语句的步骤如下:

    1. 用户传送要执行的SQL语句给SQL引擎

    2. SQL引擎要求查询优化器提供执行计划

    3. 查询优化取得系统统计信息、SQL语句引用对象的对象统计信息、SQL概要和构成执行环境的初始化参数

    4. 查询优化器分析SQL语句并产生执行计划

    5. 将执行计划传递给SQL引擎

    6. SQL引擎执行SQL语句

    参考:Oracle Database Performance Tuning Guide, 10g Release 2 (10.2)

    下载地址:http://www.oracle.com/pls/db102/homepage

    (一)、Developing Efficient SQL Statements

    1、Use of EXISTS versus IN for Subqueries(11-9)

          In certain circumstances, it is better to use IN rather than EXISTS. In general, if the
    selective predicate is in the subquery, then use IN. If the selective predicate is in the
    parent query, then use EXISTS.(在特定的情况下,使用IN可能比使用EXISTS会更好,一般,如果选择的过滤条件在子查询中,那么使用IN,如果,选择的过滤条件在父查询的SQL语句中,那么使用EXISTS)

    例如:EXISTS

     1 SELECT /* EXISTS EXAMPLE */
     2  E.EMPLOYEE_ID,
     3  E.FIRST_NAME,
     4  E.LAST_NAME,
     5  E.SALARY
     6   FROM EMPLOYEES E
     7  WHERE E.DEPARTMENT_ID = 80 /* NOTE 5 */
     8    AND E.JOB_ID = 'SA_REP' /* NOTE 6 */
     9    AND EXISTS (SELECT 1 /* NOTE 1 */
    10           FROM ORDERS O
    11          WHERE E.EMPLOYEE_ID = O.SALES_REP_ID); /* NOTE 2 */

        Note:
        ■ Note 1: This shows the line containing EXISTS.
        ■ Note 2: This shows the line that makes the subquery a correlated subquery.
        ■ Note 5 & 6:These are the selective predicates in the parent SQL.(代表父语句中的SQL过滤条件,在这种情况下,过滤条件出现在父SQL,所以,推荐使用EXISTS)

     】

    IN

    1 SELECT /* IN EXAMPLE */
    2  E.EMPLOYEE_ID,
    3  E.FIRST_NAME,
    4  E.LAST_NAME,
    5  E.SALARY
    6   FROM EMPLOYEES E
    7  WHERE E.EMPLOYEE_ID IN (SELECT O.SALES_REP_ID /* NOTE 4 */
    8                            FROM ORDERS O
    9                           WHERE O.CUSTOMER_ID = 144); /* NOTE 3 */

        Note:
        ■ Note 3: This shows the line where the correlated subqueries  include the highly selective predicate customer_id = number
        ■ Note 4: This indicates that an IN is being used. The subquery is no longer correlated, because the IN clause replaces the join in the subquery.(过滤条件在子查询中,所以选择使用IN)

    SQL Tuning Information Views

          This section summarizes the views that you can display to review information that has
    been gathered for tuning the SQL statements. You need DBA privileges to access these
    views.

         ■ Advisor information views, such as DBA_ADVISOR_TASKS, DBA_ADVISOR_
    FINDINGS, DBA_ADVISOR_RECOMMENDATIONS, and DBA_ADVISOR_RATIONALE
    views.
         ■ SQL tuning information views, such as DBA_SQLTUNE_STATISTICS, DBA_
    SQLTUNE_BINDS, and DBA_SQLTUNE_PLANS views.
         ■ SQL Tuning Set views, such as DBA_SQLSET, DBA_SQLSET_BINDS, DBA_
    SQLSET_STATEMENTS, and DBA_SQLSET_REFERENCES views.
         ■ Information on captured execution plans for statements in SQL Tuning Sets are
    displayed in the DBA_SQLSET_PLANS and USER_SQLSET_PLANS views.
         ■ SQL Profile information is displayed in the DBA_SQL_PROFILES view.
         ■ Advisor execution progress information is displayed in the V$ADVISOR_
    PROGRESS view.
         ■ Dynamic views containing information relevant to the SQL tuning, such as V$SQL,
    V$SQLAREA, V$SQLSTATS, and V$SQL_BINDS views.
          See Also: Oracle Database Reference for information on static data
    dictionary and dynamic views

     hint

     hints, which are optimization instructions placed in a comment in the statement.

     

     

  • 相关阅读:
    关于项目管理的几点建议
    网站性能优化之服务端(一)
    HP CQ35 Windows7声卡驱动安装不上问题
    ubuntu双系统启动时卡死解决办法
    第十九周练习题
    第十六周作业练习题
    第十七周练习题
    第十八周练习题
    第十五周练习题
    第十四周练习题
  • 原文地址:https://www.cnblogs.com/caroline/p/2651794.html
Copyright © 2011-2022 走看看