Aller au contenu

La SARGabilité (SARGability), qu’est-ce que c’est ?


sargabilité

Une condition (ou un prédicat) dans une requête est dite SARGable si le moteur SQL Server peut utiliser un index (seek au lieu de tout scanner) pour accélérer l’exécution de la requête.

👉 Le terme SARGable est une contraction de Search ARGument ABLE.

SARGable = index seek
Non-SARGable = index/table scan


Exemple

✅ SARGable (bien)

WHERE DateCommande >= ‘2026-01-01’

  AND DateCommande <  ‘2026-02-01’

  • SQL Server peut faire un Index Seek
  • Filtrage directement dans l’index
  • Peu de lectures, rapide

❌ Non SARGable (mal)

WHERE CONVERT(date, DateCommande) = ‘2026-01-01’

Pourquoi ?

  • La fonction est appliquée sur la colonne
  • SQL Server doit :
    1. lire chaque ligne
    2. calculer CONVERT(date, DateCommande)
    3. comparer

👉 Scan garanti, même avec un index parfait.


Règle d’or

🔴 Jamais de fonction, calcul ou conversion sur la colonne filtrée

Fonctions qui cassent la SARGability :

  • CONVERT, CAST, TRY_CONVERT
  • YEAR(), MONTH(), DAY()
  • ISNULL(col, 0)
  • opérations arithmétiques (col + 1, col * 100)
  • LIKE ‘%abc’ (joker à gauche)

Cas classique :

WHERE YEAR(DateCommande) = 2026

❌ Non SARGable

Version SARGable :

WHERE DateCommande >= ‘2026-01-01’

  AND DateCommande <  ‘2027-01-01’


TRY_CONVERT et SARGability

WHERE TRY_CONVERT(int, ColVarchar) = 10

❌ Non SARGable
Même problème : fonction sur la colonne.

Solutions :

1️⃣ Conversion en amont (staging)

ALTER TABLE T

ADD ColInt AS TRY_CONVERT(int, ColVarchar) PERSISTED;

CREATE INDEX IX_T_ColInt ON T(ColInt);

👉 Redevient 100 % SARGable


2️⃣ Convertir la constante (pas la colonne)

WHERE DateCommande >= CONVERT(datetime, ‘2026-01-01’)

✅ OK
La colonne reste “nue”.


Comment reconnaître un problème de SARGability ?

Indices typiques :

  • Index présent mais jamais utilisé
  • Index Scan au lieu de Index Seek
  • Compute Scalar juste avant un Filter
  • Lectures logiques élevées
  • CPU inutilement haut

80 % des problèmes SARGability viennent de :

  • Filtres sur dates
  • Conversions implicites
  • Colonnes varchar historiques

et 95 % se corrigent sans ajouter d’index !

Diagnostiquer, optimiser, maintenir

Votre SQL SERVER sur mesure

Étiquettes:

1 commentaire pour “La SARGabilité (SARGability), qu’est-ce que c’est ?”

  1. Hey, oui c’est une notion fondamentale ! mettre des index et voir que c’est pour rien… A savoir pour tous les dev.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *