La requête MSSQL2005 ci-dessous est très lente. Je pense que leur devrait être un moyen de l'accélérer, mais je ne sais pas comment. Notez que j'ai édité la jointure interne pour utiliser des instructions select pour rendre plus évident (aux personnes lisant cette question) ce qui se passe, bien que cela n'a aucun impact sur la vitesse (le plan d'exécution est probablement le même). Fait intéressant, je n'utilise jamais les groupes de mots-clés pour quelque chose de plus qu'un compte, mais je ne suis pas sûr qu'il existe un moyen de tirer parti de cela.Requête SQL Optimization
select top 1 cde.processPath as 'keywordValue', count(*) as 'total'
from dbo.ClientDefinitionEntry AS cde INNER JOIN dbo.KeywordValueGroups AS kvg
ON cde.keywordGroupId = kvg.keywordValueGrpId
where kvg.[name] = @definitionName
group by cde.processPath
order by total desc
Éditer: Apparemment, les gens continuent à se plaindre de mon utilisation des sous-requêtes. En fait, cela ne fait aucune différence. Je les ai ajoutés juste avant de poster cette question pour qu'il soit plus facile de voir ce qui se passe. Mais ils ont seulement rendu les choses plus confuses, alors je l'ai changé pour ne pas les utiliser.
Modifier: Indices utilisés:
ClientDefinitionEntry:
IX_ClientDefinitionEntry |nonclustered located on PRIMARY|clientId, keywordGroupId
KeyWordValueGroups
IX_KeywordValueGroups |nonclustered located on PRIMARY|keywordValueGrpId
IX_KeywordValueGroups_2 |nonclustered located on PRIMARY|version
IX_KeywordValueGroups_Name |nonclustered located on PRIMARY|name
Des exemples de données pour ces tables seraient probablement utiles ... –
Quels index avez-vous en place? Sont-ils à jour? –
Je suis tout à fait d'accord avec Andomar et Frederik - faites d'abord une recherche de base avant de vous lancer dans des changements de DB ou de faire des suppositions sur ce qui doit être indexé. De cette façon, vous risquez moins de perdre du temps avec des solutions inappropriées. – Xiaofu