J'ai une requête qui recherche des clients en utilisant "like" avec wildcard. Par exemple:SQL Server: comment optimiser les requêtes "like"?
SELECT TOP (10)
[t0].[CLIENTNUMBER],
[t0].[FIRSTNAME],
[t0].[LASTNAME],
[t0].[MI],
[t0].[MDOCNUMBER]
FROM [dbo].[CLIENT] AS [t0]
WHERE (LTRIM(RTRIM([t0].[DOCREVNO])) = '0')
AND ([t0].[FIRSTNAME] LIKE '%John%')
AND ([t0].[LASTNAME] LIKE '%Smith%')
AND ([t0].[SSN] LIKE '%123%')
AND ([t0].[CLIENTNUMBER] LIKE '%123%')
AND ([t0].[MDOCNUMBER] LIKE '%123%')
AND ([t0].[CLIENTINDICATOR] = 'ON')
Il peut également utiliser moins de paramètres dans « where », par exemple:
SELECT TOP (10)
[t0].[CLIENTNUMBER],
[t0].[FIRSTNAME],
[t0].[LASTNAME],
[t0].[MI],
[t0].[MDOCNUMBER]
FROM [dbo].[CLIENT] AS [t0]
WHERE (LTRIM(RTRIM([t0].[DOCREVNO])) = '0')
AND ([t0].[FIRSTNAME] LIKE '%John%')
AND ([t0].[CLIENTINDICATOR] = 'ON')
Quelqu'un peut-il dire quelle est la meilleure façon d'optimiser les performances de cette requête? Peut-être que je dois créer un index? Cette table peut avoir jusqu'à 1000 000 enregistrements en production.
L'index ne vous aidera pas si vous utilisez 'LIKE'. Et pourquoi avez-vous besoin d'optimiser: avez-vous déjà un problème de performance? – van
Les index ne peuvent pas vous aider avec des valeurs commençant par des caractères génériques, c'est-à-dire qu'ils vous aideront avec des valeurs comme 'John%' mais ** not ** '% John%' – vladr
Si vous utilisez LINQ, vous pouvez passer de 'Contains' à 'StartsWith', SQL Server pourra utiliser un index. – Gabe