Gå til hovedinnhold
Espen Eriksmoen Løke 16. februar, 2026

SARGable eller ikke SARGable

Noen ytelsesproblemer i SQL Server er komplekse.

Andre starter med noe veldig enkelt: Hvordan WHERE-klausulen i queryen din er skrevet. Et sentralt begrep her er SARGable.


Hva betyr SARGable?

SARGable kommer fra uttrykket: Search ARGument ABLE

Det betyr at SQL Server kan bruke et søkeargument (predikatet ditt) til å navigere direkte i en indeks. Når en betingelse er SARGable, kan optimizer gjøre en index seek. Når den ikke er det, må den ofte gjøre en scan.

Forskjellen er stor når tabellen vokser.

Kort sagt:

  • SARGable = SQL Server kan bruke indeksen effektivt

  • Ikke SARGable = SQL Server må lese mer data enn nødvendig

 

Eksempel

Vi har tabellen Orders med clustered eller non-clustered index på kolonnen OrderDate. Følgende query:

SELECT *
FROM Orders
WHERE YEAR(OrderDate) = 2025;

Queryen er korrekt. Den returnerer riktig data. Men den er ikke SARGable. Hvorfor? Fordi vi bruker en funksjon på kolonnen:

YEAR(OrderDate)

Da må SQL Server beregne YEAR() for hver rad før den kan sammenligne. Indeksen på OrderDate kan ikke brukes direkte. Resultatet blir ofte en index scan.

SARGable versjon

SELECT *
FROM Orders
WHERE OrderDate >= ‘2025-01-01’
AND OrderDate < ‘2026-01-01’;

Her står kolonnen uendret.

SQL Server kan:

  • Navigere direkte i indeksen

  • Begrense lesingen til et intervall

  • Estimere radantall mer presist

Dette er SARGable.

Få en kostnadsfri vurdering av ditt SQL-miljø

Kontakt oss