Overblog
Suivre ce blog
Editer l'article Administration Créer mon blog
22 avril 2011 5 22 /04 /avril /2011 12:13

Heute bin ich um 3 Uhr morgens aufgewacht, und dieses Mal nicht wegen meines Kinds Schreien, sondern wegen der Frage im Titel.
(Ansonsten geht's meiner 4 Monaten alten Tochter ganz gut : sie schläft wie ein Sack, jede Nacht 12 Stunden)

 

Insofern eine IOT (index organized table) als Baum strukturiert ist (B-Tree), wie sieht den Ausführungsplan aus ?

 

Die Testtabellen :

 

SQL> CREATE TABLE testiot1 AS

  2  SELECT level key, level / 2 val

  3  FROM DUAL

  4  CONNECT BY level <= 100000;

 

Table crÚÚe.

 

SQL> ALTER TABLE testiot1 ADD CONSTRAINT testiot1 PRIMARY KEY (key);

 

Table modifiÚe.

 

SQL> CREATE TABLE testiot2 (

  2  key,

  3  val,

  4  CONSTRAINT testiot2pk PRIMARY KEY (key))

  5  ORGANIZATION INDEX

  6  AS SELECT * FROM testiot1;

 

Table crÚÚe.

 

Jetzt den Ausführungsplan :

 

SQL> EXPLAIN PLAN FOR

  2  SELECT * FROM testiot2

  3  /

 

ExplicitÚ.

 

EcoulÚ : 00 :00 :00.01

SQL> SELECT *

  2  FROM table(dbms_xplan.display);

 

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------

 

--------------------------------------------------------------------

| Id  | Operation        | Name       | Rows  | Bytes | Cost (%CPU)|

--------------------------------------------------------------------

|   0 | SELECT STATEMENT |            | 90755 |  2304K|    51   (0)|

|   1 |  INDEX FULL SCAN | TESTIOT2PK | 90755 2304K|    51   (0)|

--------------------------------------------------------------------

 

 

Keine Uberraschung, die ganze Tabelle ist in dem PK Index gespeichert... (Na ja, vielleicht hätten wir ein FAST FULL SCAN erwarten dürfen...)

Also das war jetzt ein ganz überflüssiges blödes Post, und darauf bin ich sehr Stolz.

 

Noch eine weitere nutzlose Bemerkung :
Eine IOT ist unoptimiziert für FULL SCANS, den die Baumstruktur soll entweder gereinigt werden (FAST FULL SCAN), oder durchgelesen werden (mit überflüssige dateien).

 

SQL> set autotrace traceonly statistics

SQL> SELECT * FROM testiot1;

 

100000 ligne(s) sÚlectionnÚe(s).

 

EcoulÚ : 00 :00 :00.03

 

Statistiques

----------------------------------------------------------

          0  recursive calls

          0  db block gets

        413  consistent gets

          0  physical reads

          0  redo size

    1130447  bytes sent via SQL*Net to client

       1869  bytes received via SQL*Net from client

        201  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

     100000  rows processed

 

SQL> SELECT * FROM testiot2;

 

100000 ligne(s) sÚlectionnÚe(s).

 

EcoulÚ : 00 :00 :00.05

 

Statistiques

----------------------------------------------------------

          0  recursive calls

          0  db block gets

        440  consistent gets

          0  physical reads

          0  redo size

    1130448  bytes sent via SQL*Net to client

       1869  bytes received via SQL*Net from client

        201  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

     100000  rows processed

 

Also, falls ihr echt was über IOT wissen wollt : 

http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96590/adg07iot.htm

 

 

 

Partager cet article

Published by Pacman - dans SGBD
commenter cet article

commentaires