<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 閱讀(226) 評論(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
    主站蜘蛛池模板: 最近中文字幕电影大全免费版| 欧洲亚洲综合一区二区三区| 日本免费在线观看| 中文字幕亚洲电影| 国产精品免费一区二区三区| 狠狠亚洲狠狠欧洲2019| CAOPORM国产精品视频免费| 国产成人亚洲精品91专区手机| 七次郎成人免费线路视频| 亚洲人成国产精品无码| 香蕉免费在线视频| 亚洲精品夜夜夜妓女网| 成全动漫视频在线观看免费高清版下载 | 最新国产AV无码专区亚洲| 一区二区三区精品高清视频免费在线播放| 国产男女猛烈无遮档免费视频网站| 亚洲精品无码av片| 四虎成人精品在永久免费| 又大又硬又粗又黄的视频免费看 | 亚洲日韩精品射精日| 两个人看的www免费| 久久久久亚洲av无码专区蜜芽| 免费播放一区二区三区| 亚洲成年人免费网站| 美女黄网站人色视频免费国产 | 99re6在线视频精品免费| 337p日本欧洲亚洲大胆色噜噜| 国产91免费在线观看| 国产AV无码专区亚洲AV蜜芽| 亚洲精品国产精品乱码不卞| 国产麻豆一精品一AV一免费| 亚洲av永久无码精品三区在线4| 日本高清免费网站| a级毛片高清免费视频就| 亚洲AV综合色区无码二区爱AV| 国产日产成人免费视频在线观看| 久久不见久久见免费影院www日本| 亚洲国产一区二区三区青草影视| 免费观看无遮挡www的视频| 日本系列1页亚洲系列| 亚洲国产精品线在线观看|