약 400 000 개의 레코드가 들어 있고 인트라넷 웹 사이트의 홈페이지에서 호출되는 테이블이 있습니다. 성수기에는 300-400 명의 동시 사용자를 보유 할 수 있습니다. SQL 프로필러 도구는 다음과 같은 결과를 제공합니다.SQL 서버 쿼리 응답 시간 개선
- CPU : 406
- 읽고 : 32,446
- 기간 : 나는 '어디에'조항에 포함 된 필드를 색인을 397
. 응답 시간을 더 향상시킬 수있는 방법이 있습니까?
디스크 읽기를 줄이기 위해 수행해야 할 작업은 무엇입니까?
서버 구성 : Windows 2003 64 비트, SQL Server 2005 64 비트 SP2, .NET 2.0.
아래에 쿼리 및 테이블 정의가 추가되었습니다. 여기 내가 단순화를 위해 여기에 추가하지 않은 40 개의 필드가 더 있습니다. 대부분 varchar 인 필드는 where 절에서 사용되지 않습니다. 그들은 단지 페이지에 나타납니다. 현재 사용되지 않는 일부 필드 (5-6)가 있지만 나중에 필요할 것이기 때문에 쿼리에 남겨 두었습니다. 나는 지금 그 (것)들을 벗어야 하는가? 응답 시간을 향상시킬 수 있습니까?
쿼리
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
[사용자]
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
테이블 정의를 게시하시기 바랍니다 ...도 색인화해야하며, SQL 쿼리 –
은 매우 도움이 될 것입니다, 동의했다. –
와우 :) 고마워요, 당신의 반응 그 자체가 저에게 많이 생각해 줬습니다. 나는 몇 분 안에 테이블 정의와 쿼리를 게시 할 것이다. – user20358