Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Tworzenie indeksu klastrowego w Oracle przy użyciu IOT? Dezorientacja

Cytat z Przewodnika po koncepcjach firmy Oracle

Załóżmy, że mamy tabelę ZAMÓWIENIE, jak opisano w Twoim pytaniu.

-- 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 ;

Dane testowe

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  

Jeśli teraz po prostu utworzysz IOT (tablicę zorganizowaną według indeksu), będzie ona pusta.

-- 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

Zamiast tego możesz:utworzyć IOT, wybierając z oryginalnej tabeli (zobacz także:Parallelizing Index-Organized Table Creation tutaj ).

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

Powstały IOT zawiera ...

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 

Możesz znaleźć tę dyskusję przydatne.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. zbieraj informacje dba_users w bazie danych Oracle po połączeniu jako użytkownik

  2. Kontynuacja P:Porównaj wiersze w tabeli Oracle i zaktualizuj pasujące wiersze

  3. Pobierz kolumnę klucza podstawowego tabeli w Oracle

  4. Skalowanie wartości dziesiętnej spowodowało obcięcie danych przez ODBC

  5. Problem TO_DATE z funkcją Oracle DBMS_SQL.EXECUTE