0Pricing
SQL Interview Prep · Leçon

Ordre des colonnes d’un index composite

La règle du préfixe gauche et le choix du bon ordre de colonnes pour une charge de travail

Ordre des colonnes d’un index composite est une leçon SQL Interview Prep gratuite sur CoddyKit. Ceci est la leçon 2 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 Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Interview Prep comprend 4 leçons au total.

La question de l’index composite

Une fois que vous savez expliquer un index sur une seule colonne, les recruteurs augmentent la difficulté : « Vous interrogez la base sur customer_id et order_date ensemble. Comment les indexeriez-vous ? » La réponse attendue est un index composite (à plusieurs colonnes), accompagnée d’une justification de l’ordre des colonnes.

Cette leçon vous enseigne la règle du préfixe de gauche, l’idée qui explique presque toutes les questions sur les index composites que vous pourriez rencontrer.

Qu’est-ce qu’un index composite ?

Un index composite indexe plusieurs colonnes sous forme de tuple ordonné. Les entrées sont d’abord triées selon la première colonne, puis selon la deuxième en cas d’égalité, et ainsi de suite, exactement comme un annuaire téléphonique trié par nom de famille, puis par prénom.

L’ordre est extrêmement important, car la priorité du tri suit l’ordre des colonnes que vous déclarez.

CREATE INDEX idx_orders_cust_date
  ON orders (customer_id, order_date);

La règle du préfixe de gauche

La règle fondamentale est la suivante : un index composite sur (A, B, C) peut être utilisé par les requêtes qui filtrent sur un préfixe de gauche de ces colonnes :

  • A seul, oui
  • A, B, oui
  • A, B, C, oui
  • B seul, NO
  • B, C, NO

Pensez à l’annuaire téléphonique : vous pouvez trouver toutes les personnes portant le nom « Smith », mais vous ne pouvez pas trouver efficacement toutes celles qui s’appellent « John », quel que soit leur nom de famille, car le livre n’est pas trié de cette manière.

Exemple détaillé : correspondances avec le préfixe

Avec l’index sur (customer_id, order_date), ces requêtes peuvent l’utiliser parce qu’elles commencent par customer_id :

La première utilise uniquement la colonne en tête. La deuxième utilise les deux colonnes : elle restreint d’abord la recherche à customer_id, puis se positionne parmi les entrées de ce client triées par date.

-- Uses the index (leading column)
SELECT * FROM orders WHERE customer_id = 42;

-- Uses the index fully (both columns, in order)
SELECT * FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-01-01';

Exemple détaillé : échec du préfixe

Cette requête filtre uniquement sur la deuxième colonne. L’index sur (customer_id, order_date) ne peut donc généralement pas piloter la recherche : les entrées ne sont pas triées globalement selon order_date.

Si filtrer uniquement sur order_date est un cas fréquent, vous avez besoin d’un index distinct qui commence par order_date.

-- Does NOT use idx_orders_cust_date efficiently
SELECT * FROM orders
WHERE order_date >= '2026-01-01';

-- Fix: an index that leads with order_date
CREATE INDEX idx_orders_date ON orders (order_date);

L’égalité avant l’intervalle

Voici une précision de niveau avancé : placez les colonnes utilisées avec une égalité (=) avant celles utilisées avec un intervalle (<, >, BETWEEN). Une fois que l’index atteint une colonne d’intervalle, il ne peut plus utiliser les colonnes suivantes pour restreindre la recherche.

Pour une requête comme status = 'paid' AND created_at > ?, le bon ordre est (status, created_at), et non l’inverse.

-- Query: WHERE status = 'paid' AND created_at > '2026-01-01'
-- Good: equality column first
CREATE INDEX idx_orders_status_created
  ON orders (status, created_at);

Choisir la colonne en tête

Comment choisir la colonne à placer en premier ? Les recruteurs attendent une réponse fondée sur la charge de travail :

  • Placez en tête la colonne qui apparaît dans le plus grand nombre de requêtes, en particulier comme filtre d’égalité.
  • Privilégiez une colonne à forte sélectivité (comportant de nombreuses valeurs distinctes), afin que la première étape élimine le plus grand nombre de lignes.
  • Tenez compte des besoins de ORDER BY : faire correspondre l’ordre de l’index peut éviter un tri.

La colonne en tête est celle qui effectue le filtrage le plus important dans l’ensemble réel de vos requêtes.

Un index composite accélère aussi le tri

Un index composite sert aussi pour ORDER BY sur un préfixe de gauche. Comme les entrées sont triées selon customer_id, puis selon order_date, une requête qui demande les commandes d’un client triées par date est pratiquement sans coût : aucun tri distinct n’est nécessaire.

-- No sort step: the index already supplies this order
SELECT * FROM orders
WHERE customer_id = 42
ORDER BY order_date;

N’empilez pas les index redondants

Les candidats créent souvent trop d’index. Si vous avez déjà (customer_id, order_date), un index distinct sur (customer_id) seul est généralement redondant : l’index composite couvre déjà les requêtes portant sur la colonne en tête.

Chaque index supplémentaire occupe de l’espace de stockage et ralentit les écritures. L’objectif est donc de disposer du plus petit ensemble d’index couvrant vos schémas de requêtes, et non d’avoir un index par colonne.

Démontrer son utilisation avec EXPLAIN

Comme toujours, confirmez le choix du planificateur. Après avoir créé un index composite, exécutez EXPLAIN et vérifiez s’il apparaît sous la forme d’un Index Scan, ainsi que le nombre de lignes estimé.

Si une requête dont le préfixe ne correspond pas revient à un balayage séquentiel, vous avez la preuve que l’ordre des colonnes ne correspond pas à la charge de travail. C’est exactement ce que vous expliqueriez à un recruteur.

EXPLAIN
SELECT * FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-01-01';

Comment le formuler lors de l’entretien

Une phrase de synthèse concise :

« Un index composite est trié selon ses colonnes de gauche à droite. Il peut donc servir pour tout préfixe de gauche de ces colonnes, mais pas pour un sous-ensemble situé à droite. Je place en tête la colonne qui filtre le plus et qui possède une forte sélectivité, je mets les prédicats d’égalité avant les prédicats d’intervalle et j’aligne autant que possible l’ordre sur ORDER BY, puis je vérifie avec EXPLAIN. »

Vérification rapide

Appliquez la règle du préfixe le plus à gauche.

Récapitulatif : ordre d’un index composite

Points essentiels :

  • Un index composite est trié de gauche à droite ; il ne peut exploiter qu’un préfixe le plus à gauche de ses colonnes.
  • Placez en premier la colonne la plus interrogée et à forte sélectivité.
  • Placez les colonnes d’égalité avant les colonnes d’intervalle.
  • Un préfixe correspondant peut aussi satisfaire ORDER BY sans tri.
  • Évitez les index redondants à une seule colonne déjà couverts par un index composite, et vérifiez avec EXPLAIN.

Ensuite : les index couvrants qui éliminent entièrement la lecture du tas.

Questions Fréquemment Posées

La leçon « Ordre des colonnes d’un index composite » est-elle gratuite ?

Oui — le texte complet de « Ordre des colonnes d’un index composite » 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 Interview Prep, passe à CoddyKit PRO. Le cours SQL Interview Prep comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Ordre des colonnes d’un index composite » ?

La règle du préfixe gauche et le choix du bon ordre de colonnes pour une charge de travail Tu pratiques SQL Interview Prep 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 Interview Prep ?

Aucune expérience préalable n'est requise. SQL Interview Prep 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 2 sur 4.

Combien de temps prend la leçon « Ordre des colonnes d’un index composite » ?

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 Interview Prep ?

Oui. Chaque leçon SQL Interview Prep 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. Index B-tree et leur utilité
  2. Ordre des colonnes d’un index composite
  3. Index couvrants et parcours par index seul
  4. Quand les index nuisent : écritures et sélectivité
← Retour à SQL Interview Prep