Le plan d'exécution
Lire la sortie d'EXPLAIN et d'EXPLAIN ANALYZE : l'arbre des opérations, parcours séquentiel ou par index, les jointures, tri, coût, lignes estimées contre lignes réelles et statistiques.
- 25 cartes
- 4 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
Quelques cartes du deck
Plan d'exécution : de quoi s'agit-il ?
Voir la réponse
Arbre d'opérations (parcours, jointures, tri, agrégat) choisi par la base pour répondre à une requête SQL, qui dit comment elle va chercher les données.
SQL dit quoi chercher, jamais comment. Le plan est ce « comment » : le même SELECT peut s'exécuter de plusieurs façons, de vitesses très différentes.
Quelle est la différence entre EXPLAIN et EXPLAIN ANALYZE ?
- ANALYZE exécute la requête et ajoute les temps et lignes réels
- ANALYZE recalcule les statistiques des tables avant d'afficher le plan
- EXPLAIN exécute la requête, ANALYZE se contente de l'afficher
- ANALYZE ajoute automatiquement les index manquants
Voir la réponse
ANALYZE exécute la requête et ajoute les temps et lignes réels
EXPLAIN montre le plan prévu sans rien exécuter. EXPLAIN ANALYZE exécute vraiment : on compare alors les lignes estimées aux lignes réelles pour repérer les mauvaises estimations. La commande ANALYZE seule, elle, rafraîchit les statistiques.
L'optimiseur choisit son plan d'après des … sur les tables : nombre de lignes, répartition des valeurs. Périmées, elles font choisir un mauvais plan.
Voir la réponse
L'optimiseur choisit son plan d'après des statistiques sur les tables : nombre de lignes, répartition des valeurs. Périmées, elles font choisir un mauvais plan.
Après un gros chargement ou une grosse suppression, il faut les rafraîchir (ANALYZE chez PostgreSQL) pour que les estimations redeviennent justes.
EXPLAIN ANALYZE : de quoi s'agit-il ?
Voir la réponse
Commande qui exécute vraiment la requête, puis affiche le plan avec, pour chaque opération, le temps passé et le nombre de lignes réellement traitées.
EXPLAIN seul n'exécute rien et ne donne que des estimations. Attention : sur un UPDATE ou un DELETE, EXPLAIN ANALYZE modifie réellement les données.
On veut voir le plan réel d'un DELETE sur la base de production. Comment le faire sans perdre de données ?
- Lancer EXPLAIN ANALYZE tel quel : il ne fait que lire
- Lancer EXPLAIN ANALYZE entre BEGIN et ROLLBACK
- Ajouter LIMIT 1 pour ne supprimer qu'une ligne
- Utiliser EXPLAIN ANALYZE en READ UNCOMMITTED
Voir la réponse
Lancer EXPLAIN ANALYZE entre BEGIN et ROLLBACK
EXPLAIN ANALYZE exécute la requête : le DELETE a lieu pour de bon. Dans une transaction annulée ensuite par ROLLBACK, on obtient le plan réel sans garder la suppression.