Skip to content

CREATE INDEX – Créer un index

Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 6 minutes


En SQL, la commande CREATE INDEX permet de créer un index. L’index est utile pour accélérer l’exécution d’une requête SQL qui lit des données et ainsi améliorer les performances d’une application utilisant une base de données.

Bon à savoir : Les index peuvent être créés sur une ou plusieurs colonnes. Ils améliorent les performances des lectures mais ralentissent les écritures (INSERT, UPDATE, DELETE). Il est donc important de les utiliser avec discernement.


La syntaxe basique pour créer un index est la suivante :

CREATE INDEX nom_index ON table (colonne);

Créer un index sur plusieurs colonnes (index composite)

Section titled “Créer un index sur plusieurs colonnes (index composite)”

Il est possible de créer un index sur plusieurs colonnes en les listant séparées par des virgules :

CREATE INDEX nom_index ON table (colonne1, colonne2);

Un index unique garantit que les valeurs de la colonne (ou des colonnes) sont uniques dans toute la table. Le SGBD retournera une erreur si une requête tente d’insérer une valeur en double.

CREATE UNIQUE INDEX nom_index ON table (colonne);

Créer un index avec des options spécifiques

Section titled “Créer un index avec des options spécifiques”

Certains SGBD permettent d’ajouter des options comme DESC (ordre descendant) ou des clauses WHERE (index partiel).

PostgreSQL (index partiel) :

CREATE INDEX idx_utilisateur_actif ON utilisateur (nom) WHERE actif = true;

MySQL (index avec ordre descendant) :

CREATE INDEX idx_utilisateur_nom ON utilisateur (nom DESC);

Supposons une table utilisateur avec une colonne email fréquemment utilisée dans les requêtes WHERE :

CREATE INDEX idx_utilisateur_email ON utilisateur (email);

Exemple 2 : Index composite sur deux colonnes

Section titled “Exemple 2 : Index composite sur deux colonnes”

Pour une table commande où les requêtes filtrent souvent par date_commande et client_id :

CREATE INDEX idx_commande_client_date ON commande (client_id, date_commande);

Bon à savoir : L’ordre des colonnes dans un index composite est important. Il est généralement recommandé de placer en premier la colonne la plus sélective (celle qui a le plus de valeurs distinctes).


Pour garantir que chaque adresse email est unique :

CREATE UNIQUE INDEX idx_utilisateur_email_unique ON utilisateur (email);

Cette commande empêche l’insertion de deux utilisateurs avec la même adresse email.

Exemple 2 : Index unique sur plusieurs colonnes

Section titled “Exemple 2 : Index unique sur plusieurs colonnes”

Pour garantir qu’une combinaison de colonnes est unique (ex: un client ne peut pas avoir deux commandes avec le même numéro de commande) :

CREATE UNIQUE INDEX idx_commande_client_numero ON commande (client_id, numero_commande);

Il n’existe pas de convention de nommage officielle, mais voici des suggestions de préfixes utilisés par de nombreux développeurs et administrateurs de bases de données :

Préfixe Signification
PK_ Primary Key (clé primaire)
FK_ Foreign Key (clé étrangère)
UK_ Unique Key (clé unique)
UX_ Unique Index (index unique)
IDX_ ou IX_ Index standard

Exemples :

-- Index standard
CREATE INDEX idx_utilisateur_email ON utilisateur (email);
-- Index unique
CREATE UNIQUE INDEX uk_utilisateur_email ON utilisateur (email);
-- Index composite
CREATE INDEX idx_commande_client_date ON commande (client_id, date_commande);

Imaginons une table produit et une table commande dans une base de données e-commerce.

Table « produit » :

CREATE TABLE produit (
id INT PRIMARY KEY,
nom VARCHAR(255),
categorie VARCHAR(100),
prix DECIMAL(10,2),
stock INT,
date_ajout DATE
);

Création d’index pour optimiser les requêtes :

-- Index pour les recherches par catégorie
CREATE INDEX idx_produit_categorie ON produit (categorie);
-- Index pour les tris par prix
CREATE INDEX idx_produit_prix ON produit (prix DESC);
-- Index composite pour les recherches par catégorie et prix (filtre + tri)
CREATE INDEX idx_produit_categorie_prix ON produit (categorie, prix);
-- Index partiel (PostgreSQL) : seulement pour les produits en stock
CREATE INDEX idx_produit_stock ON produit (stock) WHERE stock > 0;

Requête optimisée par ces index :

-- Utilise idx_produit_categorie_prix (filtre sur categorie + tri sur prix)
SELECT * FROM produit WHERE categorie = 'informatique' ORDER BY prix DESC;
-- Utilise idx_produit_stock (PostgreSQL) pour les produits en stock
SELECT * FROM produit WHERE stock > 0;

SHOW INDEX FROM nom_table;
SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'nom_table';
SELECT name, type_desc FROM sys.indexes WHERE object_id = OBJECT_ID('nom_table');
SELECT index_name, uniqueness FROM user_indexes WHERE table_name = 'NOM_TABLE';

DROP INDEX nom_index ON nom_table;
DROP INDEX nom_index;
DROP INDEX nom_index ON nom_table;

SGBD CREATE INDEX UNIQUE INDEX Index composite Index partiel
MySQL Oui Oui Oui Non
MariaDB Oui Oui Oui Non
PostgreSQL Oui Oui Oui Oui
SQL Server Oui Oui Oui Oui (filtre)
Oracle Oui Oui Oui Oui (filtre)
SQLite Oui Oui Oui Oui

  1. Analysez vos requêtes avant de créer des index : utilisez EXPLAIN pour identifier les requêtes lentes (voir chapitre 45).

  2. Indexez les colonnes utilisées dans WHERE, JOIN, ORDER BY et GROUP BY.

  3. Préférez les index composites lorsque les requêtes filtrent sur plusieurs colonnes.

  4. Choisissez l’ordre des colonnes dans un index composite en fonction de la sélectivité : placez la colonne la plus sélective en premier.

  5. Évitez les index sur les colonnes avec une faible sélectivité (ex: une colonne sexe avec seulement 2 valeurs distinctes).

  6. Surveillez la performance des écritures : chaque index supplémentaire ralentit les INSERT, UPDATE et DELETE.

  7. Utilisez des noms explicites pour vos index (incluez le nom de la table et les colonnes).

  8. Testez en environnement de développement avant de créer des index en production.


Erreur Cause Solution
Duplicate key name Index avec le même nom existe déjà Utiliser un nom différent
Duplicate entry (UNIQUE) Donnée en double dans la colonne Supprimer les doublons avant de créer l’index unique
Index column size too large Colonne trop grande pour l’index (MySQL) Limiter la taille de l’index ou utiliser un préfixe
Cannot create index on view Index sur une vue non supporté Créer l’index sur la table sous-jacente

Vous savez désormais comment créer des index pour optimiser vos requêtes. Mais comment savoir si vos index sont réellement utilisés et si vos requêtes sont efficaces ?

👉 Chapitre 45 : EXPLAIN – Analyser les requêtes


Bonne continuation !
Junior TSAFACK – 08/08/2026