Pourquoi oracle CHOISIR INDEX RANGE SCAN plus RAPIDE ANALYSE d'INDEX

J'ai lu de la documentation sur les indices, j'ai fait quelques exemples et maintenant j'ai quelques doutes.

- Je créer un tableau et insérer des valeurs aléatoires, (Une colonne de valeurs uniques) de la colonne not NULL
J'ai créer un index sur A, B, C. (B-TREE)

SELECT COUNT(*) FROM DEMO_FULL_INDEX_SCAN;
=1000
SELECT * FROM DEMO_FULL_INDEX_SCAN;

         A          B          C          D          E          F
---------- ---------- ---------- ---------- ---------- ----------
         1          7        109          1          1          1
         2         12         83          2          2          2
         3         21        120          3          3          3
         4         13         74          4          4          4
         5          2          1          5          5          5
...

Documentation dit lorsque toutes les requêtes des valeurs de l'indice, les valeurs sont recueillies à partir de l'index (INDEX RAPIDE BALAYAGE COMPLET), mais ici, l'optimiseur est faire le choix d'une autre opération.

EXPLAIN PLAN FOR
SELECT A,B,C FROM DEMO_FULL_INDEX_SCAN WHERE A = 1;
--------------------------------------------------------------------
| Id  | Operation            |  Name       | Rows  | Bytes | Cost  |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT     |             |       |       |       |
|*  1 |  INDEX RANGE SCAN    | FIS_01      |       |       |       |
--------------------------------------------------------------------

- Je spécifier une allusion à l'optimiseur de choisir l'INDICE de FAST SCAN COMPLET (mais je ne sais pas pourquoi je dois le préciser)

EXPLAIN PLAN FOR
SELECT /*+ INDEX_FFS(DEMO_FULL_INDEX_SCAN FIS_01) */A,B,C FROM DEMO_FULL_INDEX_SCAN WHERE A = 1;
--------------------------------------------------------------------
| Id  | Operation            |  Name       | Rows  | Bytes | Cost  |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT     |             |     1 |    11 |     2 |
|*  1 |  INDEX FAST FULL SCAN| FIS_01      |     1 |    11 |     2 |
--------------------------------------------------------------------

Par l'autre main ,cet exemple montre que la documentation d'oracle dit.
Quand il ya une valeur dans la requête qui n'est pas dans l'index, cette valeur est accessible par TABLE ACCESS BY INDEX ROWID

EXPLAIN PLAN FOR
SELECT D FROM DEMO_FULL_INDEX_SCAN WHERE A = 800;

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
| Id  | Operation                   |  Name                 | Rows  | Bytes | Co
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                       |       |       |
|   1 |  TABLE ACCESS BY INDEX ROWID| DEMO_FULL_INDEX_SCAN  |       |       |
|*  2 |   INDEX RANGE SCAN          | FIS_01                |       |       |
--------------------------------------------------------------------------------

Ma question est ,dans le premier exemple, pourquoi Oracle CHOISIR INDEX RANGE SCAN plus RAPIDE ANALYSE d'INDEX.

InformationsquelleAutor Samardj | 2014-10-10