Bonjour,

J'en appelle à vos lumières parce que j'ai un comportement étrange. J'ai une table qui a plus de millions de lignes, on va dire que c'est la table tab(id, desc) avec un index sur la colonne ID.

Je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT Max(entryid) FROM Tab
J'ai un retour instantané de la requête.

Je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT Max(entryid) FROM Tab WHERE desc like '%title%'
Avec %title% qui existe, j'ai un retour instantané de la requête.

Je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT Max(entryid) FROM Tab WHERE desc like '%xxx%'
Avec %xxx% qui n'existe pas, la requête prend 1000 ans (plus ou moins 1000 ans )

Les plans d'exécution sont sensiblement les mêmes avec juste un usage à 100% de l'index dans le premier cas et 0% sur le filtre et 3 ou 6% sur le filtre selon que j'exécute la 2eme ou 3eme colonne.

Déjà là, ça m'interpelle. Maintenant, les dévs qui m'ont signalé le problème me disent que dans leur cas ça prend toujours très longtemps. Pourquoi ? Simplement parce que leur requête ressemble à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT Max(entryid) FROM Tab WHERE desc like '%' + @variable + '%'
donc même si la variable est title ou une autre valeur qui fonctionne parfaitement si on la saisit en dur, en .Net ça prend très longtemps.

N'y connaissant rien aux arcanes de SQL Server et encore moins de celles de .Net, j'en appelle donc à votre aide pour m'expliquer ce comportement étrange. A savoir qu'on a des solutions de contournement mais qu'on aimerait bien connaitre le fin mot de l'histoire

Merci d'avance