SP tager laang tid, hvorfor?
Jeg har foelgende som tager ca 20 sek at udfoere:DECLARE @IdPerson AS INT
SELECT @IdPerson = 14
DECLARE @IdPart AS BIGINT
DECLARE @IdPartSelectedModel AS BIGINT
DECLARE @IdSameAsSelected AS BIGINT
DECLARE @SkillLevel AS INT
SELECT @IdPartSelectedModel = IdPartSelectedModel, @IdSameAsSelected = IdsameAs, @SkillLevel = SkillLevel
FROM Persons pe
LEFT OUTER JOIN parts pa ON pa.IdPart = IdPartSelectedModel
WHERE IdPerson = @IdPerson
--BEGIN TRANSACTION
SELECT TOP 1 pa.IdPart
FROM Parts pa
INNER JOIN Projects pr ON pr.IdProject = pa.IdProject -- All parts belong to a project
LEFT OUTER JOIN Persons pe ON pa.IdPart = pe.IdPartSelectedModel -- Not all parts are selected
LEFT OUTER JOIN ManufacturerParts mp ON pa.IdPart = mp.IdPart -- Not all parts have Manufacturer part codes attached
LEFT OUTER JOIN ClientCodes cc ON pr.IdClient = cc.IdClient AND pr.IdProjectType = cc.IdProjectType AND cc.ClientCode = pa.ClientCode
WHERE StartDate IS NOT NULL AND -- project started
EndDate IS NULL AND -- project not finished
IdPicture > 2 AND -- sort away no picture
IdGeometry IS NULL AND -- no geometry already
IdProcessInstruction IN (4, 16) AND -- either normal or force
pa.IdDifficultyLevel > 1 AND -- has to have a difficultyLevel
(IdGeometryForce IS NULL OR IdProcessInstruction = 16) AND
IdPersonLockModel IN (@IdPerson, 0) AND -- remove already selected clientcodes except the one this person is doing
IdSameAs NOT IN -- Herfra
(
SELECT IdSameAs
FROM Parts
WHERE IdSameAs > 0 AND
IdGeometry > 0 AND
IdSameAs <> @IdSameAsSelected
) AND -- Tilher
pa.IdPart NOT IN
(
SELECT pa.IdPart
FROM Parts pa
INNER JOIN ManufacturerParts mp ON pa.IdPart = mp.IdPart
WHERE ManufacturerPartCode IN
( -- Select all ManufacturerPartCode's that have geometry attached
SELECT ManufacturerPartCode
FROM ManufacturerParts mp
INNER JOIN Parts pa ON pa.IdPart = mp.IdPart
WHERE IdGeometry IS NOT NULL
) OR
ManufacturerPartCode IN
( -- select parts already been taken by others...
SELECT ManufacturerPartCode
FROM ManufacturerParts mp
INNER JOIN Persons pe ON IdPart = IdPartSelectedModel
WHERE IdPerson != @IdPerson
) AND
pa.IdPart <> @IdPartSelectedModel
) AND
pa.IdDifficultyLevel&@SkillLevel&PartsFilter > 0 -- select only a part where persons skill_level are sufficient
ORDER BY IdPartSelectedModel desc, pr.Priority desc, pa.IdPriority asc, pa.IdDifficultyLevel desc
Hvordan kan jeg finde ud af hvad der tager lang tid, og HVORFOR?
Hvis jeg sletter --herfra --tilher, saa tager det kun 1 sek. Jeg har et index paa idsameas og idgeometry
