Sargable - Sargable
Nei database relazionali , una condizione (o predicato) in una query è definita sargable se il motore DBMS può sfruttare un indice per accelerare l'esecuzione della query. Il termine deriva da una contrazione di Search ARGument ABLE .
Una query che non riesce a essere sargable è nota come query non sargable e in genere ha un effetto negativo sul tempo di query, quindi uno dei passaggi nell'ottimizzazione delle query è convertirle in sargable. L'effetto è simile alla ricerca di un termine specifico in un libro che non ha indice, iniziando ogni volta dalla pagina uno, invece di saltare a un elenco di pagine specifiche identificate in un indice.
La situazione tipica che rende una query SQL non sargable è includere nella clausola WHERE una funzione che opera su un valore di colonna. La clausola WHERE non è l'unica clausola in cui la sargability può avere importanza; può anche avere effetto sulle clausole ORDER BY, GROUP BY e HAVING. La clausola SELECT, d'altra parte, può contenere espressioni non selezionabili senza influire negativamente sulle prestazioni.
- Operatori selezionabili:
=, >, <, >=, <=, BETWEEN, LIKE, IS [NOT] NULL - Operatori selezionabili che raramente migliorano le prestazioni:
<>, IN, OR, NOT IN, NOT LIKE
Semplice esempio
WHERE le clausole che possono essere modificate in genere hanno valori di campo a sinistra dell'operatore e valori scalari o espressioni a destra dell'operatore.
Non classificabile:
SELECT *
FROM myTable
WHERE 11.7 < SQRT(myIntField)
Non è selezionabile perché myIntField è incorporato in una funzione. Se degli indici fossero disponibili su myIntField, non potrebbero essere utilizzati. Inoltre, verrebbe richiamato su ogni record in myTable.
SQRT()
Versione Sargable:
SELECT *
FROM myTable
WHERE myIntField > 11.7 * 11.7
Questo è sargable perché myIntField NON è contenuto in una funzione, rendendo potenzialmente utilizzabile qualsiasi indice disponibile su myIntField. Inoltre, l'espressione viene valutata una sola volta, anziché per ogni record nella tabella.
Guarda anche
Riferimenti
- SQL Performance Tuning di Peter Gulutzan, Trudy Pelzer (Addison Wesley, 2002) ISBN 0-201-79169-2 ( Capitolo 2, "Ricerche" semplici )
- Elementi interni di Microsoft SQL Server 2012 di Kalen Delaney, Connor Cunningham, Jonathan Kehayias, Benjamin Nevarez, Paul S. Randal (O'Reily, 2013) ISBN 978-0-7356-5856-1 (Capitolo 11, Query Optimizer)