J'ai les suivantes View, appelé ViewGoods:Sélectionnez Délai d'attente avec 2 Paramètres
SELECT
G.Gid,
SI.[$Id] AS FirstSiteInId,
SI.Date AS FirstSiteInDate,
SI.Comments AS FirstSiteInComments,
S.[$Id] AS FirstSiteId,
S.[$Refex] AS FirstSiteRefex,
SI.Client AS ClientId,
C.[$Refex] AS ClientRefex,
CASE WHEN SI.Contract IS NULL THEN (SELECT Contract.[$Id]
FROM StockType AS ST
INNER JOIN StockTypeContract AS STC ON ST.[$Id] = STC.[$ParentId]
INNER JOIN Contract ON STC.Contract = Contract.[$Id]
WHERE ST.[$Id] = VGST.StockType
AND SI.Date >= STC.StartDate)
ELSE SI.Contract END AS Contract,
CASE WHEN SI.Contract IS NULL THEN (SELECT Contract.[$Refex]
FROM StockType AS ST
INNER JOIN StockTypeContract AS STC ON ST.[$Id] = STC.[$ParentId]
INNER JOIN Contract ON STC.Contract = Contract.[$Id]
WHERE ST.[$Id] = VGST.StockType
AND SI.Date >= STC.StartDate)
ELSE CT.[$Refex] END AS ContractRefex,
CASE WHEN COALESCE (Q.Quantity, 0) > 0 THEN L.SiteId ELSE NULL END AS SiteId,
CASE WHEN COALESCE (Q.Quantity, 0) > 0 THEN L.SiteRefex ELSE NULL END AS SiteRefex,
CASE WHEN COALESCE (Q.Quantity, 0) > 0 THEN L.Lid ELSE NULL END AS Lid,
ISNULL(W.Weight, VGSA.Weight * Q.Quantity) AS Weight,
COALESCE (Q.Quantity, 0) AS Quantity,
VGSA.Article,
VGSA.ArticleName,
VGST.StockType,
VGST.StockTypeRefex
FROM dbo.Goods AS G
INNER JOIN dbo.SiteIn AS SI ON G.SiteIn = SI.[$Id]
INNER JOIN dbo.Client AS C ON C.[$Id] = SI.Client
INNER JOIN dbo.Site AS S ON SI.Site = S.[$Id]
LEFT OUTER JOIN dbo.Contract AS CT ON SI.Contract = CT.[$Id]
LEFT OUTER JOIN dbo.ViewGoodsLocation AS L ON G.Gid = L.Gid
LEFT OUTER JOIN dbo.ViewGoodsWeight AS W ON G.Gid = W.Gid
LEFT OUTER JOIN dbo.ViewGoodsQuantity AS Q ON G.Gid = Q.Gid
LEFT OUTER JOIN dbo.ViewGoodsSingleArticle AS VGSA ON G.Gid = VGSA.Gid
LEFT OUTER JOIN dbo.ViewGoodsStockType AS VGST ON VGST.Gid = G.Gid
Lors de l'interrogation qui Voir avec le paramètre Client ou le paramètre Lid, individuellement, tout fonctionne bien. Mais si j'essaie de mélanger les deux, la vue expire sans résultat. Ci-dessous la requête RemettRe le délai d'attente:
SELECT [t0].[Gid], [t0].[FirstSiteInId], [t0].[FirstSiteInDate], [t0].[FirstSiteInComments], [t0].[FirstSiteId], [t0].[FirstSiteRefex], [t0].[ClientId], [t0].[ClientRefex], [t0].[Contract], [t0].[ContractRefex], [t0].[SiteId], [t0].[SiteRefex], [t0].[Lid], [t0].[Weight], [t0].[Quantity], [t0].[Article], [t0].[ArticleName], [t0].[StockType], [t0].[StockTypeRefex]
FROM [ViewGoods] AS [t0]
WHERE ([t0].[Lid] IS NOT NULL) AND (([t0].[ClientId]) = 70)
Où ai-je passé?
EDIT: J'ai inclus ici le plan d'exécution réel http://pastebin.com/PMY0aLE1.
Avez-vous regardé le plan d'exécution de la requête de sélection? Il donnera parfois de bons conseils sur les index manquants – MLT
Je seconde le commentaire de Martin Smith pour échanger les références de vue avec les requêtes réelles qu'elles contiennent, puis optimiser la requête. C'est contre-intuitif d'un point de vue procédural/programmation OO, mais c'est un terrain basé SET ... –