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.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. 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.