뷰 이름이 "vw_AllJobsWithRecruiter"입니다.쿼리 튜닝 SQL Server 2008
ALTER VIEW dbo.vw_AllJobsWithRecruiter
AS
SELECT TOP(SELECT COUNT(iJobID_PK) FROM dbo.tbUS_Jobs)
iJobId_PK AS JobId,
dbo.ufn_JobStatus(iJobId_PK) AS JobStatus,
dbo.ufn_RecruiterCompanyName(iJobId_PK) AS CompanyName,
sOther AS OtherCompanyName
FROM dbo.tbUS_Jobs
WHERE bDraft = 0
ORDER BY dtPostedDate DESC
이보기에는 3278 행만 포함됩니다.
SELECT * FROM vw_AllJobsWithRecruiter
WHERE OtherCompanyName LIKE '%Microsoft INC%'
그것은 실행할 초 미만 복용 : 나는 아래의 쿼리를 실행하면
.
이제 내 문제는 다음과 같습니다
내가 쿼리 아래의 쿼리를 사용하는 경우 : 그것은 실행하는 30 초 복용하고 프론트 엔드에서 시간 초과 오류를 던지고있다
SELECT * FROM vw_AllJobsWithRecruiter
WHERE CompanyName LIKE '%Microsoft INC%'
OR OtherCompanyName LIKE '%Microsoft INC%'
합니다. 기능은 여기에 있습니다 :
이CREATE Function [dbo].[ufn_RecruiterCompanyName] (@JobId bigint)
RETURNS nvarchar(200)
AS
BEGIN
DECLARE @ResultVar nvarchar(200)
DECLARE @RecruiterId bigint
select @RecruiterId = iRecruiterId_FK from dbo.tbUS_Jobs with (Nolock)
where iJobId_PK = @JobId;
Select @ResultVar = sCompanyName from dbo.tbUS_RecruiterCompanyInfo with (Nolock)
where iRecruiterId_FK = dbo.ufn_GetParentRecruiterID(@RecruiterId)
return isnull(@ResultVar,'')
END
다른 기능은
CREATE Function [dbo].[ufn_GetParentRecruiterID](@RecruiterId bigint)
returns bigint
as
begin
declare @ParentRecruiterId bigint
SELECT @ParentRecruiterId = iParentId FROM dbo.tbUS_Recruiter with (Nolock)
WHERE iRecruiterId_PK = @RecruiterId
IF(@ParentRecruiterId = 0)
SET @ParentRecruiterId = @RecruiterId
RETURN @ParentRecruiterId
end
내 질문
- 가 왜 실행하기 위해 너무 많은 시간을 걸리는거야?
- 어떻게 실행 시간을 줄일 수 있습니까?
고맙습니다.
TOP (SELECT COUNT (iJobID_PK) FROM dbo.tbUS_Jobs) 절의 목적은 무엇입니까? 그것은 이상하고 아마도 쓸모가 없습니다. iJobID_PK가 널이 아닌 행이 필요할 경우, WHERE 절이 더 적절합니다. – Skrol29
을 사용하여 TOP (SELECT COUNT (iJobID_PK) FROM dbo.tbUS_Jobs) 절을 사용하면보기에서 주문을 사용할 수 없습니다. –
@ Skrol29 그 TOP (..) Construct는'SELECT TOP 100 %'와 같고 SQL 서버가'ORDER BY'를 따르도록 지시합니다. TOP가 없으면 주문을 무시합니다. –