<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 閱讀(219) 評論(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
    主站蜘蛛池模板: 亚洲国产午夜精品理论片| 亚洲阿v天堂在线| 亚洲熟女www一区二区三区| 999在线视频精品免费播放观看| 亚洲日韩国产一区二区三区在线| 337p日本欧洲亚洲大胆艺术| a级毛片毛片免费观看久潮喷| 美女视频黄a视频全免费网站色窝| 99热在线免费播放| 亚洲日本一区二区| 国产福利视精品永久免费| 亚洲黄色免费观看| 久久99九九国产免费看小说| 亚洲一卡2卡3卡4卡5卡6卡| 日本久久久免费高清| 未满十八私人高清免费影院| 中文字幕亚洲一区二区va在线| 亚洲av永久无码嘿嘿嘿| 香蕉97超级碰碰碰免费公| 亚洲色偷偷色噜噜狠狠99网| 免费一级毛片不卡不收费| 成人片黄网站色大片免费观看cn| av无码免费一区二区三区| 亚洲色一区二区三区四区| 国产青草视频免费观看97| 人人爽人人爽人人片av免费| 亚洲人成人77777网站| 中文字幕亚洲免费无线观看日本| 亚洲毛片av日韩av无码| 亚洲免费视频在线观看| 亚洲一区二区三区精品视频| 亚洲国产婷婷综合在线精品| 今天免费中文字幕视频| 亚洲欧洲日本在线观看| 亚洲真人日本在线| 国产免费不卡视频| 一区二区免费电影| 亚洲国产成a人v在线观看| 亚洲乱码中文字幕综合234| 免费三级毛片电影片| 久久成人永久免费播放|