Come tutti coloro che usano SQL Server sapranno, l'utilizzo della clausola LIKE all'interno di una query può essere problematico. In SQL Server 2000 l'utilizzo è "lecito" nel caso in cui l'utilizzo di wildcard sia limitato alla funzionalità di ricerca di valori che "iniziano per" un determinato valore. Ad esempio
SELECT Telefono FROM Elenco WHERE Cognome LIKE 'Ma%'
è tranquillamente ottimizzabile dall'optimizer di SQL Server e puà utilizzare l'indice eventualmente costruito sulla colonna Cognome. Questo discorso non è più applicabile se la nostra clausola diventa
... LIKE '%ri'
In questo caso SQL Server 2000 passa sicuramente a fare un'operazione di scan, in quato l'indice non è di nessuna utilità.
Bene, con SQL Server 2005 le cose cambiano: l'indice costruito sulla colonna Cognome può anche memorizzare le informazioni sulla distribuzione dei valori (ossia le statistiche) analizzando le substring contenute nella colonna indicizzata, e quindi l'indice diventa (potenzialmente) utile anche nel caso suddetto, e, quindi, anche nel caso più esteso:
... LIKE '%aur%'