次のクエリがあり、問題なく実行されます。結果が得られるまでに 1 秒もかかりません。
SELECT DISTINCT Items.ImageID AS ImgID, Items.AddDate, MIN(ra1.DescPriority) AS Pri
FROM Items
INNER JOIN Attribs AS ra0 ON Items.ImageID = ra0.ImageID
INNER JOIN Attribs AS ra1 ON ra0.ImageID = ra1.ImageID
LEFT OUTER JOIN v_priceOrder ON Items.ImageID = v_priceOrder.ImageID
WHERE (Items.deleted NOT IN (1, 2))
GROUP BY Items.ImageID, Items.AddDate
ORDER BY pri, Items.AddDate DESC
ただし、選択リストで PriceOrder ビューから列を追加しようとすると、結果を取得するのに 10 秒かかります。
SELECT DISTINCT Items.ImageID AS ImgID, Items.AddDate, MIN(ra1.DescPriority) AS Pri,
v_priceOrder.PriceOrder
FROM Items
INNER JOIN Attribs AS ra0 ON Items.ImageID = ra0.ImageID
INNER JOIN Attribs AS ra1 ON ra0.ImageID = ra1.ImageID
LEFT OUTER JOIN v_priceOrder ON Items.ImageID = v_priceOrder.ImageID
WHERE (Items.deleted NOT IN (1, 2))
GROUP BY Items.ImageID, Items.AddDate, v_priceOrder.PriceOrder
ORDER BY v_priceOrder.PriceOrder, pri, Items.AddDate DESC
このクエリを改善する方法はありますか? 実行計画では、0 または 1% のコストしか表示されません。MS SQL Server 2008 R2 を使用しています。
更新: 私のビューに問題がありました。実行に 8 秒かかります... これがクエリです。
SELECT dbo.Items.ImageID,
CASE WHEN dbo.Items.SubcategoryID2 = 'STO' THEN dbo.v_DisplayStockPrice.DisplayPrice WHEN dbo.Items.SubcategoryID2 = 'ORD' THEN dbo.v_FinalPriceFactor.[14kyFactorOrder]
WHEN dbo.Items.SubcategoryID2 IS NULL THEN dbo.v_FinalPriceFactor.[14kyCustomLow] END AS PriceOrder
FROM dbo.v_FinalPriceFactor RIGHT OUTER JOIN
dbo.Items ON dbo.v_FinalPriceFactor.ImageID = dbo.Items.ImageID LEFT OUTER JOIN
dbo.v_DisplayStockPrice ON dbo.Items.ImageID = dbo.v_DisplayStockPrice.ImageID
WHERE (dbo.Items.deleted NOT IN (1, 2))