Teradata - Expliquez
La commande EXPLAIN renvoie le plan d'exécution du moteur d'analyse en anglais. Il peut être utilisé avec n'importe quelle instruction SQL sauf sur une autre commande EXPLAIN. Lorsqu'une requête est précédée de la commande EXPLAIN, le plan d'exécution du moteur d'analyse est renvoyé à l'utilisateur au lieu des AMP.
Exemples d'EXPLAIN
Considérez la table Employee avec la définition suivante.
CREATE SET TABLE EMPLOYEE,FALLBACK (
EmployeeNo INTEGER,
FirstName VARCHAR(30),
LastName VARCHAR(30),
DOB DATE FORMAT 'YYYY-MM-DD',
JoinedDate DATE FORMAT 'YYYY-MM-DD',
DepartmentNo BYTEINT
)
UNIQUE PRIMARY INDEX ( EmployeeNo );
Quelques exemples de plan EXPLAIN sont donnés ci-dessous.
Balayage complet de la table (FTS)
Lorsqu'aucune condition n'est spécifiée dans l'instruction SELECT, l'optimiseur peut choisir d'utiliser l'analyse complète de la table où chaque ligne de la table est accessible.
Exemple
Voici un exemple de requête dans lequel l'optimiseur peut choisir FTS.
EXPLAIN SELECT * FROM employee;
Lorsque la requête ci-dessus est exécutée, elle produit la sortie suivante. Comme on peut le voir, l'optimiseur choisit d'accéder à tous les AMP et à toutes les lignes de l'AMP.
1) First, we lock a distinct TDUSER."pseudo table" for read on a
RowHash to prevent global deadlock for TDUSER.employee.
2) Next, we lock TDUSER.employee for read.
3) We do an all-AMPs RETRIEVE step from TDUSER.employee by way of an
all-rows scan with no residual conditions into Spool 1
(group_amps), which is built locally on the AMPs. The size of
Spool 1 is estimated with low confidence to be 2 rows (116 bytes).
The estimated time for this step is 0.03 seconds.
4) Finally, we send out an END TRANSACTION step to all AMPs involved
in processing the request.
→ The contents of Spool 1 are sent back to the user as the result of
statement 1. The total estimated time is 0.03 seconds.
Index primaire unique
Lorsque les lignes sont accessibles à l'aide d'un index primaire unique, il s'agit d'une opération AMP.
EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;
Lorsque la requête ci-dessus est exécutée, elle produit la sortie suivante. Comme on peut le voir, il s'agit d'une extraction à un seul AMP et l'optimiseur utilise l'index principal unique pour accéder à la ligne.
1) First, we do a single-AMP RETRIEVE step from TDUSER.employee by
way of the unique primary index "TDUSER.employee.EmployeeNo = 101"
with no residual conditions. The estimated time for this step is
0.01 seconds.
→ The row is sent directly back to the user as the result of
statement 1. The total estimated time is 0.01 seconds.
Index secondaire unique
Lorsque les lignes sont accessibles à l'aide de l'index secondaire unique, il s'agit d'une opération à deux ampères.
Exemple
Considérez le tableau Salaire avec la définition suivante.
CREATE SET TABLE SALARY,FALLBACK (
EmployeeNo INTEGER,
Gross INTEGER,
Deduction INTEGER,
NetPay INTEGER
)
PRIMARY INDEX ( EmployeeNo )
UNIQUE INDEX (EmployeeNo);
Considérez l'instruction SELECT suivante.
EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;
Lorsque la requête ci-dessus est exécutée, elle produit la sortie suivante. Comme on peut le voir, l'optimiseur récupère la ligne dans une opération à deux ampères à l'aide d'un index secondaire unique.
1) First, we do a two-AMP RETRIEVE step from TDUSER.Salary
by way of unique index # 4 "TDUSER.Salary.EmployeeNo =
101" with no residual conditions. The estimated time for this
step is 0.01 seconds.
→ The row is sent directly back to the user as the result of
statement 1. The total estimated time is 0.01 seconds.
Conditions supplémentaires
Voici la liste des termes couramment utilisés dans le plan EXPLAIN.
... (Last Use) …
Un fichier spoule n'est plus nécessaire et sera libéré lorsque cette étape sera terminée.
... with no residual conditions …
Toutes les conditions applicables ont été appliquées aux lignes.
... END TRANSACTION …
Les verrous de transaction sont libérés et les modifications sont validées.
... eliminating duplicate rows ...
Les lignes en double existent uniquement dans les fichiers spool, pas dans les tables définies. Effectuer une opération DISTINCT.
... by way of a traversal of index #n extracting row ids only …
Un fichier spoule est généré contenant les ID de ligne trouvés dans un index secondaire (index #n)
... we do a SMS (set manipulation step) …
Combinaison de lignes à l'aide d'un opérateur UNION, MINUS ou INTERSECT.
... which is redistributed by hash code to all AMPs.
Redistribution des données en préparation d'une jointure.
... which is duplicated on all AMPs.
Duplication des données de la table plus petite (en termes de SPOOL) en vue d'une jointure.
... (one_AMP) or (group_AMPs)
Indique qu'un AMP ou un sous-ensemble d'AMP sera utilisé à la place de tous les AMP.