sql >> データベース >  >> RDS >> Oracle

IOTを使用してOracleでクラスター化されたインデックスを作成しますか?錯乱

    Oracleのコンセプトガイド からの引用

    あなたの質問で説明されているように、ORDERテーブルがあるとします。

    -- create table ORDER_, with test data
    -- table name with trailing underscore avoids ORA-00903: invalid table name
    create table order_
    as
    select 
      level * 10000 + trunc( dbms_random.value * 100 ) order_id
    , trunc( dbms_random.value * 100000 )              part_id
    , dbms_random.string( 'x', 10 )                    customer_id
    , trunc( sysdate + level * 10 )                    order_date
    from dual connect by level <= 10 ;
    

    テストデータ

    SQL> select * from order_ ;
    ORDER_ID  PART_ID  CUSTOMER_ID  ORDER_DATE  
    10069     74711    KBGHAHWTL8   27-MAR-18   
    20034     99571    7VUNFJER44   06-APR-18   
    30038     64160    ORXP2RRA3K   16-APR-18   
    40005     81247    B9N43NSVQ7   26-APR-18   
    50019     90889    8H5G12D82E   06-MAY-18   
    60017     34107    9O4OSETJ4H   16-MAY-18   
    70078     53959    77MUCKJW82   26-MAY-18   
    80015     9496     U5J6Z85KXR   05-JUN-18   
    90081     88450    2LEUPZGFOS   15-JUN-18   
    100031    38487    NX4BHBF3TN   25-JUN-18  
    

    ここでIOT(インデックス編成テーブル)を作成しただけでは、空になります。

    -- your original code
    CREATE TABLE clust_order(
        order_id number,
        part_id number,
        CONSTRAINT part_pk PRIMARY KEY (part_id)
    )ORGANIZATION INDEX;
    
    Table CLUST_ORDER created.
    
    SQL> select * from clust_order ;
    
    no rows selected
    

    代わりにできることは、元のテーブルから選択してIOTを作成することです(参照:インデックス編成テーブルの作成の並列化ここ

    create table clust_order 
    ( 
      part_id constraint part_pk primary key
    , order_id 
    ) 
    organization index
    parallel
    as
    select 
      part_id
    , order_id 
    from order_;
    

    結果のIOTには...

    が含まれます
    SQL> select * from clust_order;
    PART_ID  ORDER_ID  
    9496     80015     
    34107    60017     
    38487    100031    
    53959    70078     
    64160    30038     
    74711    10069     
    81247    40005     
    88450    90081     
    90889    50019     
    99571    20034 
    

    このディスカッション 便利です。




    1. PostgreSQLの日付から日、月、年を取得する3つの関数

    2. .NET / SQL Serverの接続プール?

    3. FROM句で更新対象のテーブル'NAME'を指定することはできません

    4. データベースからデータを取得してPHPページにエコーする方法は?