Plan d'exécution en utilisant B + index des arbres, mais aussi sortes
-
16-10-2019 - |
Question
J'utilise sqlplus
Oracle. J'ai la requête suivante:
SELECT fooID from foo MINUS
SELECT fooID from bar;
J'ai créé deux indices d'arbres B + unclustered. Un dans le domaine fooID
of la table foo
et un dans le fooID
de champ de la table bar
. Après que j'analyse les statistiques de mes deux tableaux: foo
et bar
et vérifier le plan d'exécution de ma requête à l'aide EXPLAIN PLAN ...
. Mais je reçois ceci:
SELECT STATEMENT
MINUS
SORT UNIQUE
INDEX FAST FULL SCAN FOO_INDEX
SORT UNIQUE
INDEX FAST FULL SCAN BAR_INDEX
Comment est-ce possible? Quand vous faites INDEX FAST FULL SCAN
, car l'index est un arbre B +, ne pas le système revient tuples de tri il? Pourquoi il n'a pas besoin de faire SORT UNIQUE
(données déjà triées)?
La solution
Oracle dit sur les index et les tables organisées Index sous indexer scan : dans une analyse complète des index, la base de données lit l'index entier pour .
Et pourtant, unter rapide Index Scan complet , il se lit comme suit: Une analyse rapide d'index complet est une analyse complète des index dans lequel la base de données permet d'accéder aux données de l'indice lui-même sans accès à la table, et la base de données lit les blocs d'index dans pas d'ordre particulier . (Non souligné)
Maintenant, sans doute, la question devrait être:. Pourquoi le optimzier choisir INDEX FAST FULL SCAN
sur INDEX FULL SCAN
Une allusion à la réponse de cette dernière question est donnée dans