Potrzebuję pomocy przy optymalizacji zapytania SQL, które wykonuje się zdecydowanie za wolno. Próbowałem sam się uporać z tym problemem jednak brakuje mi już pomysłów jak to rozwiązać.
Kod zapytania w poniższym linku.
http://wklej.org/id/1087334/
SELECT dbo.MetaOffer.MetaOfferId, dbo.MetaOffer.OfferName, dbo.MetaOffer.CheckOutDate, dbo.MetaOffer.CreateDate, dbo.MetaOffer.CoordinatorDate, dbo.MetaOffer.DeploymentDate, ohii.UserId, dbo.Customer.CustomerNip, dbo.Customer.DisplayName AS CustomerFullName, dbo.ObjectType.ObjectTypeName, creator.FirstName + ' ' + creator.LastName AS CreatorFullName, Kozu.ProcessStatus.STATUS, owner.FirstName + ' ' + owner.LastName AS OwnerFullName, owner.Sfid AS OwnerSfid, creator.Sfid AS CreatorSfid, analyst.FirstName + ' ' + analyst.LastName AS AnalystFullName, coord.FirstName + ' ' + coord.LastName AS CoordFullName, coord.Sfid AS CoordSfid, analyst.Sfid AS AnalystSfid, ownerGroup.Name AS NazwaGrupy, deployer.FirstName + ' ' + deployer.LastName AS DeployerFullName, deployer.Sfid AS DeployerSfid, dbo.Customer.S2KNumber, dbo.MetaOffer.ObjectTypeId, dbo.MetaOffer.LastStatusChangeDate, dbo.MetaOffer.LastProcessStatusId, dbo.MetaOffer.SourceMetaOfferId, CAST(SUBSTRING ((SELECT ' ,' + CAST(Nip AS nvarchar(50)) FROM CustomerNip cn WHERE cn.CustomerId = dbo.Customer.CustomerId FOR XML PATH('')), 3, 100) AS nvarchar(200)) AS NIPs, dbo.MetaOffer.IsArchive, dbo.MetaOffer.TemplateName, CAST(LastHistory.ActionComment AS nvarchar(400)) AS ActionComment, dbo.Customer.City, dbo.Trade.TradeName, checkout.FirstName + ' ' + checkout.LastName AS CheckOutFullName FROM dbo.MetaOffer WITH (nolock) INNER JOIN dbo.OfferHistoryItem AS LastHistory WITH (nolock) ON LastHistory.OfferHistoryItemId = dbo.MetaOffer.LastOfferHistoryItem INNER JOIN (SELECT dbo.MetaOffer.MetaOfferId,ohi.UserId FROM dbo.MetaOffer WITH (nolock) INNER JOIN dbo.OfferHistoryItem AS LastHistory WITH (nolock) ON LastHistory.OfferHistoryItemId = dbo.MetaOffer.LastOfferHistoryItem INNER JOIN (SELECT UserId, MetaOfferId FROM dbo.OfferHistoryItem WITH (nolock) WHERE (UserId IS NOT NULL) UNION SELECT DestinationUserId, MetaOfferId FROM dbo.OfferHistoryItem AS OfferHistoryItem_2 WITH (nolock) WHERE (DestinationUserId IS NOT NULL) UNION SELECT Substitute4UserId, MetaOfferId FROM dbo.OfferHistoryItem AS OfferHistoryItem_1 WITH (nolock) WHERE (Substitute4UserId IS NOT NULL)) AS ohi ON dbo.MetaOffer.MetaOfferId = ohi.MetaOfferId WHERE (dbo.MetaOffer.ObjectTypeId != 3) UNION SELECT dbo.MetaOffer.MetaOfferId, Kozu.UserUserGroup.UserId FROM dbo.MetaOffer WITH (nolock) INNER JOIN dbo.OfferHistoryItem AS LastHistory WITH (nolock) ON LastHistory.OfferHistoryItemId = dbo.MetaOffer.LastOfferHistoryItem INNER JOIN (SELECT UserGroupId, MetaOfferId FROM dbo.OfferHistoryItem WITH (nolock) WHERE (UserGroupId IS NOT NULL) UNION SELECT DestinationUserGroupId, MetaOfferId FROM dbo.OfferHistoryItem AS OfferHistoryItem_2 WITH (nolock) WHERE (DestinationUserGroupId IS NOT NULL)) AS ohi2 ON dbo.MetaOffer.MetaOfferId = ohi2.MetaOfferId INNER JOIN Kozu.UserUserGroup WITH (nolock) ON Kozu.UserUserGroup.UserGroupId = ohi2.UserGroupId WHERE (dbo.MetaOffer.ObjectTypeId != 3)) AS ohii ON dbo.MetaOffer.MetaOfferId = ohii.MetaOfferId INNER JOIN dbo.Customer WITH (nolock) ON dbo.MetaOffer.CustomerId = dbo.Customer.CustomerId INNER JOIN dbo.Trade WITH (nolock) ON dbo.Trade.TradeId = dbo.Customer.TradeId INNER JOIN dbo.ObjectType WITH (nolock) ON dbo.MetaOffer.ObjectTypeId = dbo.ObjectType.ObjectTypeId INNER JOIN Kozu.ProcessStatus WITH (nolock) ON dbo.MetaOffer.LastProcessStatusId = Kozu.ProcessStatus.ProcessStatusId LEFT OUTER JOIN Kozu.[User] AS deployer WITH (nolock) ON dbo.MetaOffer.DeployUserId = deployer.UserId LEFT OUTER JOIN Kozu.UserGroup AS ownerGroup WITH (nolock) ON dbo.MetaOffer.OwnerGroupId = ownerGroup.UserGroupId LEFT OUTER JOIN Kozu.[User] AS coord WITH (nolock) ON dbo.MetaOffer.CoordinatorId = coord.UserId LEFT OUTER JOIN Kozu.[User] AS analyst WITH (nolock) ON dbo.MetaOffer.CentralAnalystId = analyst.UserId LEFT OUTER JOIN Kozu.[User] AS owner WITH (nolock) ON dbo.MetaOffer.OwnerId = owner.UserId LEFT OUTER JOIN Kozu.[User] AS creator WITH (nolock) ON dbo.MetaOffer.CreatedById = creator.UserId LEFT OUTER JOIN Kozu.[User] AS checkout WITH (nolock) ON dbo.MetaOffer.CheckOutById = checkout.UserId