Je possède les deux tables suivantes :
Personne - environ 7000 lignes
- PerosnId - 9 caractères
- TypePersonne - Char (un parmi 'F' / 'C' / 'M')
PersonneStatuts - environ 90K lignes (environ 13 lignes pour chaque ligne de Personne)
- Id - Identité
- PersonneId - 9 caractères
- CodeStatut - entier
- DernièreMiseÀJour - DateTime
Je utilise une vue pour renvoyer la dernière ligne de PersonneStatuts concernant une ligne de Personne unique :
DerniersStatutsPersonne
SELECT PersonneId, CodeStatut
FROM PersonneStatuts ps1
WHERE DernièreMiseÀJour = (SELECT MAX(DernièreMiseÀJour)
FROM PersonneStatuts ps2
WHERE ps2.PersonneId = ps1.PersonneId)
La requête suivante :
SELECT DISTINCT Personne.Id
FROM Personne
WHERE Personne.Id IN (SELECT PersonneId
FROM DerniersStatutsPersonne
WHERE CodeStatut = 12) AND
Personne.TypePersonne='F'
prend environ une minute pour s'exécuter, et donc dépasse le délai, tandis que la suivante :
SELECT DISTINCT Personne.Id
FROM Personne
WHERE Personne.Id IN (SELECT PersonneId
FROM DerniersStatutsPersonne
WHERE CodeStatut = 12)
s'exécute presque instantanément.
Plan 2 http://tinypic.com/images/404.gif
Je n'arrive pas à comprendre pourquoi l'ajout de la clause WHERE dans la première requête :
Personne.TypePersonne='F'
fait une telle différence.
Est-ce que quelqu'un pourrait m'orienter, s'il vous plaît?