SQL query containing cursors and cross join taking too long to execute
I have below SQL query as part of a stored procedure in SQL Server. This is taking almost 20 minutes and sometimes more to run.
I tried to replace cursors with CTE (Common Table Expression) and have all the clustered and nonclustered indexes on the tables used in the below query.
After having all that, it is still taking too long to finish execution. Any help on making the below query execute faster would be highly appreciated. Thank you all in advance for your valuable suggestions and comments.
DECLARE @GroupID as INT;
DECLARE @MyCursor as CURSOR;
SET @MyCursor = CURSOR FOR
SELECT GroupID
FROM dbo.ThesGroup
OPEN @MyCursor;
FETCH NEXT FROM @MyCursor INTO @GroupID;
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO dbo.PartTagRel (PartID, PartTagID, IsThesaurus)
SELECT Rel.PartID, E.PartTagID2 AS PartTagID, 1 AS IsThesaurus
FROM dbo.PartTagRel AS Rel
JOIN
(SELECT R1.PartTagID AS PartTagID1, R2.PartTagID AS PartTagID2
FROM
(SELECT TT.PartTag, TT.PartTagID
FROM dbo.ThesTag AS TT
JOIN dbo.Thesaurus As Th ON Th.ThesTagID = TT.ThesTagID
WHERE Th.ThesGroupID = @GroupID) AS R1
CROSS JOIN
(SELECT TT.PartTag, TT.PartTagID
FROM dbo.ThesTag AS TT
JOIN dbo.Thesaurus AS Th ON Th.ThesTagID = TT.ThesTagID
WHERE Th.ThesGroupID = @GroupID) AS R2
WHERE
R1.PartTagID <> R2.PartTagID) AS E ON E.PartTagID1 = Rel.PartTagID
AND NOT EXISTS (SELECT *
FROM dbo.PartTagRel
WHERE PartID = Rel.PartID AND PartTagID = E.PartTagID2)
FETCH NEXT FROM @MyCursor INTO @GroupID;
END
CLOSE @MyCursor;
DEALLOCATE @MyCursor;
from Recent Questions - Stack Overflow https://ift.tt/3ycGKnL
https://ift.tt/eA8V8J
Comments
Post a Comment