Aller au contenu
Transactions, index & performance

CREATE INDEX

Un index est une structure triée, comme l'index d'un livre, qui permet de trouver des lignes sans parcourir toute la table. Il accélère lectures et jointures mais ralentit un peu les écritures.

  • index
  • performance
  • accélérer
  • index composite
  • index couvrant

Syntaxe

Modèle
CREATE [UNIQUE] INDEX [IF NOT EXISTS] idx_nomON table (colonne1, colonne2);

Exemple

Exemple concret
CREATE INDEX idx_orders_customer_dateON orders (customer_id, order_date);SELECT name, tbl_nameFROM sqlite_schemaWHERE type = 'index' AND tbl_name = 'orders';-- Jeu de données : boutique-- Résultat attendu :-- idx_orders_customer_date | orders

À retenir

  1. Candidats prioritaires : les clés étrangères (orders.customer_id), puis les colonnes souvent présentes dans WHERE, JOIN et ORDER BY.
  2. Un index composite (customer_id, order_date) sert aux filtres sur customer_id seul ou sur customer_id et order_date, mais pas sur order_date seul : c'est la règle du préfixe gauche.
  3. Piège : appliquer une fonction à la colonne empêche l'usage de l'index. WHERE strftime('%Y', order_date) = '2024' parcourt toute la table, alors que WHERE order_date >= '2024-01-01' AND order_date < '2025-01-01' utilise l'index.
  4. Piège : chaque index ralentit les INSERT, UPDATE et DELETE et occupe de la place. N'en créez pas « au cas où » : vérifiez l'utilité avec EXPLAIN QUERY PLAN.
  5. La clé primaire et les contraintes UNIQUE créent déjà leur propre index.

Voir aussi