count très lent avec 7 millions de lignes

J'ai plus de 7 millions de lignes dans une table et

SELECT COUNT(*) FROM MyTable where MyColumn like '%some ssortingng%' 

me donne 20 000 lignes et prend plus de 13 secondes.

La table a INDEX NONCLUSTERED sur MyColumn.

Y a-t-il un moyen d'améliorer la vitesse?

Les principales searchs de caractères generics can not être optimisées avec T-SQL et n'utilisent pas d'index

Regardez la search en text intégral de SQL Server

Vous pouvez essayer une search en text intégral ou un moteur de search de text tel que Lucene .

Essayez d'abord d'utiliser un classment binary, ce qui signifie que les règles Unicode complexes sont remplacées par une simple comparaison d'octets.

 SELECT COUNT(*) FROM MyTable WHERE MyColumn COLLATE Latin1_General_BIN2 LIKE '%some ssortingng%' 

Jetez également un coup d'oeil au chapitre intitulé «Construisez votre propre index» dans SQL Server MVP Deep Dives écrit par Erland Sommarskog

L'idée de base est que vous introduisez une ressortingction à l'user et que la string ait au less trois caractères contigus. Ensuite, vous extrayez toutes les séquences de trois lettres du champ MyColumn et stockez ces fragments dans une table avec le MyTable.id auquel ils appartiennent. Lorsque vous cherchez une ficelle, vous la divisez en trois fragments de lettre, et cherchez l'identifiant auquel ils appartiennent. De cette façon, vous trouvez les strings correspondantes beaucoup plus rapidement. C'est la stratégie en un mot.

Le livre décrit les détails de mise en œuvre et les moyens d'optimiser cela davantage.