J'utilise EXPLAIN PLAN dans la base de données Oracle sur une simple instruction SELECT juste pour découvrir comment cela fonctionne. Dans une sortie d'EXPLAIN PLAN, il est mentionné table access by index rowid
et dans l'autre il y a table access by index rowid BATCHED
. Quelle est la différence entre eux?
La documentation ne contient qu'une seule phrase sur ce sujet:
https://docs.Oracle.com/database/121/TGSQL/tgsql_optop.htm#GUID-4180BA97-3E2C-41F9-B282-4FB3FF9532CB
L'accès BATCHED montré à l'étape 1 signifie que la base de données récupère quelques identifiants de ligne de l'index, puis tente d'accéder aux lignes dans l'ordre des blocs pour améliorer la clustering et réduire le nombre de fois que la base de données doit accéder à un bloc.
Considérons un exemple ci-dessous de l'index (simplifié)
+-------------+------------------+
| index value | block nbr-rowid |
+-------------+------------------+
| 1 | 015-000123 |
| 2 | 034-000527 |
| 3 | 088-000285 |
| 4 | 015-000889 |
| 5 | 088-000632 |
........
........
Dans la méthode "normale" (non groupée), Oracle récupère les lignes dans l'ordre déterminé par l'index:
Dans la méthode par lots, Oracle récupère quelques entrées de l'index, puis les trie d'abord par le nombre de blocs, puis traite les entrées dans l'ordre déterminé par le nombre de blocs:
Comme vous le voyez dans cet exemple, les blocs n'ont été récupérés que 3 fois au lieu de 5, donc un certain nombre de lectures de blocs à partir du disque a été réduit - certains blocs n'ont été lus qu'une seule fois au lieu de deux (ou plus) fois.