J'ai une table qui contient environ 400 000 enregistrements et qui est appelée sur la page d'accueil du site intranet. Aux heures de pointe, nous pouvons avoir 300-400 utilisateurs simultanés. L'outil SQL Profiler donne la sortie suivante.amélioration du temps de réponse de la requête du serveur sql
- CPU: 406
- lit comme suit: 32446
- Durée: 397
J'indexé les domaines impliqués dans la clause 'où'. Existe-t-il un moyen d'améliorer le temps de réponse?
Que faut-il faire pour réduire les lectures de disque? Configuration du serveur: Windows 2003 64 bits, SQL Server 2005 64 bits SP2, .NET 2.0.
Ajout de la requête et de la définition de table ci-dessous. Il y a environ 40 autres champs que je n'ai pas ajoutés ici pour des raisons de simplicité. Les champs qui sont principalement varchar ne sont pas utilisés dans la clause where. Ils sont juste là pour apparaître sur la page. Il y a quelques champs (5-6) qui ne sont actuellement pas utilisés mais je les ai laissés dans la requête car ils seront requis plus tard. Devrais-je les enlever maintenant alors? cela améliorerait-il le temps de réponse?
Recherche
SELECT
u.[PeopleKey],
u.[EnterpriseId],
u.[PersonnelNbr],
u.LastName,
u.FirstName,
u.MiddleName,
cc.WorkForceCd AS CareerCounselorWorkForceCd,
cc.WorkForceDesc AS CareerCounselorWorkForceDesc,
cc.WorkGroupCd AS CareerCounselorWorkGroupCd,
cc.WorkGroupDesc AS CareerCounselorWorkGroupDesc,
cc.CareerLevelCd As CareerCounselorCareerLevelCd,
cc.CareerLevelDesc AS CareerCounselorCareerLevel,
CL.NextLevelCD as nextCareerLevelCd
FROM
[User] u
LEFT JOIN [User] cc ON
u.[CareerCounselorPeopleKey] = cc.PersonnelNbr
Left JOIN [CareerLevel] CLON
u.WorkForceCd= CL.WorkForceCd AND
u.CareerLevelCd = CL.LevelCd
WHERE
u.PeopleKey = <integer>
[CareerLevel]
ID int 4 [Primary Key - clustered index]
Description varchar 150
WorkforceCd varchar 4
LevelCD varchar 10
NextLevelCD varchar 10
[Utilisateur]
PeopleKey int 4 [Primary Key - clustered index]
EnterpriseId varchar 50 [non clustered index]
PersonnelNbr varchar 8 [non clustered index]
FirstName varchar 40
LastName varchar 40
MiddleName varchar 40
CareerCounselorPeopleKey int 4
CareerCounselorPersonnelNbr varchar 8
CareerCounselorName varchar 50
CapabilityCd varchar 5
CapabilityDesc varchar 25
WorkforceCd varchar 4
WorkForceDesc varchar 40
WorkGroupCd varchar 4
WorkGroupDesc varchar 50
CareerLevelCd varchar 10
CareerLevelDesc varchar 50
s'il vous plaît poster votre définition de la table, et la requête SQL –
d'accord, ce serait très utile. –
wow :) merci les gars, vos réponses m'ont donné beaucoup à réfléchir. Je publierai la définition de la table et la requête dans les prochaines minutes. – user20358