0Pricing
SQL Academy · Leçon

Parcours d’index uniquement et carte de visibilité

Activez les parcours d’index uniquement en couvrant les requêtes et en maintenant la carte de visibilité à jour.

Parcours d’index uniquement et carte de visibilité est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce qu'une analyse via l'index seul ?

Normalement, une recherche dans un index renvoie des identifiants de ligne (TID), puis la table doit être consultée pour lire la ligne réelle. L'analyse via l'index seul répond à la requête en utilisant uniquement l'index — sans consulter le tas. Elle est beaucoup plus rapide.

Conditions

Une analyse via l'index seul nécessite :

  • Toutes les colonnes sélectionnées doivent se trouver dans l'index
  • La page de la ligne doit être marquée « toutes visibles » dans la carte de visibilité

Carte de visibilité

Une représentation binaire pour chaque page de la table : un bit défini signifie que « toutes les lignes de cette page sont visibles par toutes les transactions ». VACUUM la maintient. Sans elle, PostgreSQL doit consulter le tas pour vérifier la visibilité.

Rendre une requête compatible avec une analyse via l'index seul

Couvrez toutes les colonnes nécessaires :

-- Query:
SELECT id, email FROM users WHERE id = 42;

-- Without an index on (id, email), only an Index Scan that visits the heap is possible.
-- With this:
CREATE INDEX users_id_email_idx ON users (id, email);
-- Or better:
CREATE INDEX users_id_email_idx ON users (id) INCLUDE (email);
-- The query can be index-only.

INCLUDE

Index couvrant avec des colonnes qui ne sont pas des clés (PG 11 et versions ultérieures). La colonne est stockée dans les feuilles, mais ne sert pas à l'ordonnancement — elle n'a donc aucun impact sur le coût des insertions :

CREATE INDEX users_id_idx ON users(id) INCLUDE (email, full_name);

SELECT id, email, full_name FROM users WHERE id = 42;
-- Index-only scan if visibility map allows.

Pourquoi le tas peut-il tout de même être consulté ?

Après de nombreuses écritures, la carte de visibilité peut être obsolète. Exécutez VACUUM (sans FULL) pour l'actualiser.

VACUUM (VERBOSE) users;
-- "scanned X pages, X of which are visible"
-- More visible pages = more Index-Only Scans possible.

Vérifier les analyses via l'index seul

EXPLAIN le révèle :

EXPLAIN ANALYZE
SELECT id, email FROM users WHERE id = 42;
--  Index Only Scan using users_id_email_idx on users
--    Index Cond: (id = 42)
--    Heap Fetches: 0       ← key number

Les récupérations depuis le tas vous renseignent

« Récupérations depuis le tas : 0 » — parfait, toutes les données proviennent de l'index. « Récupérations depuis le tas : N » — N lignes ont nécessité une consultation du tas (le bit de la carte de visibilité n'est pas défini). Après l'exécution du nettoyage automatique, le nombre de récupérations depuis le tas diminue généralement.

Quand utiliser INCLUDE plutôt qu'un index composite

  • Utilisez INCLUDE pour les colonnes que vous sélectionnez uniquement (sans filtrer ni trier dessus)
  • Utilisez un index composite (clé) si vous filtrez ou triez également sur la colonne

INCLUDE garde l'index plus compact et accélère les écritures.

Le gonflement des index nuit aux analyses via l'index seul

Les index gonflés comportent davantage de pages, de sorte que même les analyses via l'index seul lisent plus de données. Maintenez les index nettoyés par VACUUM et réindexez-les lorsque le gonflement devient important.

Ne couvrez pas tout

Ajouter trop de colonnes à un index ralentit les écritures et rend l'index volumineux. Ne couvrez que les chemins de lecture très sollicités.

Les vues matérialisées comme index couvrants

Si vous souhaitez une vitesse de lecture exceptionnelle pour un rapport précis, une vue matérialisée avec un index constitue essentiellement un « index couvrant » contenant des colonnes calculées arbitraires.

Récapitulatif

L'analyse via l'index seul est le chemin de lecture le plus rapide.

  • Toutes les colonnes sélectionnées doivent se trouver dans l'index
  • INCLUDE ajoute à faible coût des colonnes qui ne sont pas des clés
  • La carte de visibilité doit indiquer « toutes visibles » — VACUUM la maintient à jour
  • EXPLAIN : l'objectif est d'obtenir 0 récupération depuis le tas

Vérification rapide

EXPLAIN affiche 100 000 récupérations depuis le tas malgré un nœud d'analyse via l'index seul. Quelle est la correction habituelle ?

Questions Fréquemment Posées

La leçon « Parcours d’index uniquement et carte de visibilité » est-elle gratuite ?

Oui — le texte complet de « Parcours d’index uniquement et carte de visibilité » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Parcours d’index uniquement et carte de visibilité » ?

Activez les parcours d’index uniquement en couvrant les requêtes et en maintenant la carte de visibilité à jour. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Parcours d’index uniquement et carte de visibilité » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. MVCC et causes du gonflement
  2. VACUUM, autovacuum, vacuum_cost_delay
  3. ANALYZE et pg_statistic
  4. Parcours d’index uniquement et carte de visibilité
← Retour à SQL Academy