Itโs hard for me to optimize the queries, at the moment I'm very close to redesigning the database. And stackoverflow is my last hope. I donโt think that just showing you the query is enough, so I connected not only the database script, but also connected the database backup if you do not want to generate data manually
Here you can find both a script and a backup
Problems begin when you try to do the following ...
exec LockBranches @count=64,@lockedBy='034C0396-5C34-4DDA-8AD5-7E43B373AE5A',@lockedOn='2011-07-01 01:29:43.863',@unlockOn='2011-07-01 01:32:43.863'
The main problems arise in this part:
UPDATE B SET B.LockedBy = @lockedBy, B.LockedOn = @lockedOn, B.UnlockOn = @unlockOn, B.Complete = 1 FROM ( SELECT TOP (@count) B.LockedBy, B.LockedOn, B.UnlockOn, B.Complete FROM Objectives AS O INNER JOIN Generations AS G ON G.ObjectiveID = O.ID INNER JOIN Branches AS B ON B.GenerationID = G.ID INNER JOIN ( SELECT SB.BranchID AS BranchID, SUM(X.SuitableProbes) AS SuitableProbes FROM SpicieBranches AS SB INNER JOIN Probes AS P ON P.SpicieID = SB.SpicieID INNER JOIN ( SELECT P.ID, 1 AS SuitableProbes FROM Probes AS P INNER JOIN Results AS R ON P.ID = R.ProbeID GROUP BY P.ID HAVING COUNT(R.ID) > 0 ) AS X ON P.ID = X.ID GROUP BY SB.BranchID ) AS X ON X.BranchID = B.ID WHERE (O.Active = 1) AND (B.Sealed = 0) AND (B.GenerationNo < O.BranchGenerations) AND (B.LockedBy IS NULL OR DATEDIFF(SECOND, B.UnlockOn, GETDATE()) > 0) AND (B.Complete = 1 OR X.SuitableProbes = O.BranchSize * O.EstimateCount * O.ProbeCount) ) AS B
EDIT: The following are the number of rows in each table:
Spicies 71536 Results 10240 Probes 10240 SpicieBranches 4096 Branches 256 Estimates 5 Generations 1 Versions 1 Objectives 1
source share