COLLATE e SARGABLE
Anche oggi articolo leggero leggero..
Continuiamo con il discorso di ieri che trovate qui: SQL Server: Come fare ricerche CASE SENSITIVE
Abbiamo visto come eseguire una ricerca CASE SENSITIVE anche se il database non lo è.
Abbiamo visto infatti che possiamo sfruttare la COLLATE per ottenere il risultato voluto.
Ad esempio scrivendo una Query così:
SELECT * FROM ELENCO WHERE CODICE COLLATE SQL_Latin1_General_CP1_CS_AS = 'luca'
Ma se specifico una COLLATE nella WHERE, la stringa SQL che ottengo, è SARGABLE?
La collate è Sargable?
Vediamolo, eseguiamo quindi la nostra Query e guardiamone il piano di esecuzione...
Che ne dite?
Sul campo CODICE esiste un indice non clustered.
Di questo indice però ne viene fatta la scansione (SCAN) e non la SEEK e quindi la nostra Query NON E' SARGABLE!
Warning!
Occorre prestare sempre attenzione alla presenza di un simbolo di warning nel piano di esecuzione.
In questo caso ci avverte che per come è scritta la Query è presente un operazione di conversione implicita.
SQL Server dovrà infatti convertire uno dei due campi applicando la collate prima di fare il confronto.
Ma le operazioni di conversione disabilitano la ricerca in SEEK negli indici.
Bene, per oggi è tutto!
Con l'articolo di oggi vi saluto, l'intera redazione al completo (cioè me!) si prende qualche giorno di rigenerante relax montano.
Approfittatene se volete per rileggere gli articoli passati.
A presto!
Next post: Identificare la versione di SQL server? Semplice!
Previous post: SQL Server: Come fare ricerche CASE SENSITIVE
Comments
Post a Comment