sql >> Database teknologi >  >> RDS >> Oracle

Opretter du et clustered-indeks i Oracle ved hjælp af en IOT? Forvirring

Citat fra Oracles Concepts Guide

Antag, at vi har en ORDRE-tabel som beskrevet i dit spørgsmål.

-- opret tabel ORDER_, med testdata-- tabelnavn med efterfølgende understregning undgår ORA-00903:ugyldig tabelnavnopret tabelordre_vælg niveau * 10000 + trunc(dbms_random.value * 100) order_id, trunc(dbms_random. værdi * 100000 ) part_id, dbms_random.string( 'x', 10 ) customer_id, trunc( sysdate + level * 10 ) order_datefrom dual connect by level <=10;

Testdata

  SQL> VÆLG * FRA ORDER_; ORDER_ID PART_ID CURSE_ID ORDER_DATE 10069 74711 KBGHAHWTL8 27-MAR-18 20034 99571 7VUNFJER44 06-18 30038 64160 ORXP2RRA3K 16-apR-18 40005 81247 B9N43N43NSVQ7 2600-1300-18-18-18 90889 8H5G12D82E 06-maj-18 60017 34107 9O4OSETJ4H 16-maj-18 70078 53959 77MUCKJW82 26.-18.> 

Hvis du nu bare opretter en IOT (indeks organiseret tabel), vil den være tom.

-- din originale kodeCREATE TABLE clust_order( order_id number, part_id number, CONSTRAINT part_pk PRIMARY KEY (part_id))ORGANISATION INDEX;Tabel CLUST_ORDER oprettet.SQL> vælg * fra clust_order;ingen rækker valgt 

Hvad du kunne gøre i stedet, er:oprette IOT ved at vælge fra den originale tabel (se også:Parallelizing Index-Organized Table Creation her ).

opret tabel clust_order (part_id constraint part_pk primærnøgle, order_id ) organisation indexparallelasselect part_id, order_id from order_; 

Den resulterende IOT indeholder ...

  sql> vælg * fra clust_order; part_id ordre_id 9496 80015 34107 60017 38487 100031 53959 70078 64160 30038 74711 10069 81247 40005 88450 90081 90889 50019 99571 200344  

Du kan muligvis finde denne diskussion nyttigt.




  1. Hvad er de respektive fordele/begrænsninger ved Amazon RDS vs. EC2 med MySQL?

  2. SQL WHERE betingelse er ikke lig med?

  3. Oracle SQL-udvikler:Vis REFCURSOR-resultater i gitter?

  4. Hvordan trækker man en saltet adgangskode tilbage fra databasen og godkendelsesbrugeren?