Index partiel Partial index, index filtré
Un index qui ne couvre qu'un sous-ensemble de lignes, défini par une condition WHERE. CREATE INDEX ON orders (created_at) WHERE status = 'pending'. Plus petit, plus rapide, moins coûteux à maintenir.
Cas d'usage : n'indexer que les lignes « intéressantes ». Classiques : la suppression logique (WHERE deleted_at IS NULL → l'index ignore les lignes supprimées), les tâches actives d'une file (la plupart sont terminées ou archivées), les contraintes d'unicité sur un sous-ensemble (UNIQUE ... WHERE active tolère plusieurs doublons inactifs). Gain : si 99 % des lignes sont « terminées », l'index est cent fois plus petit. Le planificateur ne l'utilise que si le WHERE de la requête correspond à la condition de l'index ou l'implique. SQL Server l'appelle « filtered index » (index filtré). À distinguer de l'index d'expression, qui indexe un calcul et non un sous-ensemble. Une optimisation Postgres très courante.