<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Neil的備忘錄

    just do it
    posts - 66, comments - 8, trackbacks - 0, articles - 0

    Index Skip Scanning

    Posted on 2009-01-21 15:22 Neil's NoteBook 閱讀(220) 評論(0)  編輯  收藏 所屬分類: ORACLE
    In previous releases a composite index could only be used if the first column, the leading edge, of the index was referenced in the WHERE clause of a statement. In Oracle9i this restriction is removed because the optimizer can perform skip scans to retrieve rowids for values that do not use the prefix.

    How It Works

    Rather than restricting the search path using a predicate from the statement, Skip Scans are initiated by probing the index for distinct values of the prefix column. Each of these distinct values is then used as a starting point for a regular index search. The result is several separate searches of a single index that, when combined, eliminate the affect of the prefix column. Essentially, the index has been searched from the second level down.

    The optimizer uses statistics to decide if a skip scan would be more efficient than a full table scan.

    Advantages

    This approach is advantageous because:
    • It reduces the number of indexes needed to support a range of queries. This increases performance by reducing index maintenance and decreases wasted space associated with multiple indexes.
    • The prefix column should be the most discriminating and the most widely used in queries. These two conditions do not always go hand in hand which makes the decision difficult. In these situations skip scanning reduces the impact of makeing the "wrong" decision.

    Example

    First, create and populate a test table with a concatenated index.
    CREATE TABLE test_objects AS
    SELECT * FROM all_objects;

    CREATE INDEX test_objects_i ON test_objects (owner, object_name, subobject_name);

    EXEC DBMS_STATS.gather_table_stats(USER, 'TEST_OBJECTS', cascade => TRUE);
    Next, run a query that hits the leading edge of the index. Notice the range scan on the index.
    SQL> SET AUTOTRACE ON
    SQL> SELECT owner, object_name
    2 FROM test_objects
    3 WHERE owner = 'SYS'
    4 AND object_name = 'DBMS_OUTPUT';

    OWNER OBJECT_NAME
    ------------------------------ ------------------------------
    SYS DBMS_OUTPUT

    1 row selected.


    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 3650344004

    -----------------------------------------------------------------------------------
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
    -----------------------------------------------------------------------------------
    | 0 | SELECT STATEMENT | | 1 | 32 | 2 (0)| 00:00:01 |
    |* 1 | INDEX RANGE SCAN| TEST_OBJECTS_I | 1 | 32 | 2 (0)| 00:00:01 |
    -----------------------------------------------------------------------------------
    Next, run a query that does not hit the leading edge of the index. Notice the index skip scan on the index.
    SQL> SET AUTOTRACE ON
    SQL> SELECT owner, object_name
    2 FROM test_objects
    3 WHERE object_name = 'DBMS_OUTPUT';

    OWNER OBJECT_NAME
    ------------------------------ ------------------------------
    PUBLIC DBMS_OUTPUT
    SYS DBMS_OUTPUT

    2 rows selected.


    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 1293870291

    -----------------------------------------------------------------------------------
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
    -----------------------------------------------------------------------------------
    | 0 | SELECT STATEMENT | | 2 | 64 | 14 (0)| 00:00:01 |
    |* 1 | INDEX SKIP SCAN | TEST_OBJECTS_I | 2 | 64 | 14 (0)| 00:00:01 |
    -----------------------------------------------------------------------------------
    Finally, clean up the test table.
    DROP TABLE test_objects;
    For more information see:
    Hope this helps. Regards Tim...

    原文地址: http://oracle-base.com/articles/9i/IndexSkipScanning.php#HowItWorks
    主站蜘蛛池模板: 精品人妻系列无码人妻免费视频| 亚洲精品视频免费| 免费91麻豆精品国产自产在线观看| 亚洲色偷精品一区二区三区| 亚洲福利在线观看| 国产亚洲人成网站在线观看| 永久免费毛片手机版在线看| 曰批全过程免费视频网址| 中文字幕乱理片免费完整的| 日韩色日韩视频亚洲网站| 亚洲六月丁香婷婷综合| 亚洲伊人tv综合网色| 亚洲乱亚洲乱妇无码麻豆| 亚洲精品岛国片在线观看| 日本v片免费一区二区三区| 999国内精品永久免费视频| 久久99精品视免费看| 成在线人免费无码高潮喷水| 污视频网站在线免费看| 国产亚洲精品AAAA片APP| 国产精品亚洲精品| 亚洲av日韩av无码av| 亚洲福利一区二区| 日木av无码专区亚洲av毛片| 亚洲AV福利天堂一区二区三| 亚洲AV日韩AV鸥美在线观看| 亚洲国产高清人在线| 亚洲一区二区三区首页| 亚洲激情视频在线观看| 亚洲av无码精品网站| 精品亚洲永久免费精品| 亚洲成a人片在线观看无码专区| 亚洲日韩激情无码一区| 久久精品国产亚洲网站| 亚洲国产综合专区在线电影| 香蕉视频在线观看亚洲| 亚洲综合久久1区2区3区| 亚洲一区电影在线观看| 伊人久久五月丁香综合中文亚洲| 亚洲熟妇久久精品| 美女免费精品高清毛片在线视|