1 つの日付の実行に約 11 秒かかるクエリがあります。同じクエリを複数日実行したい。つまり、複数日のスナップショットを返せるようにしたいのです。ここに私の元のクエリがあります:
SELECT
COUNT(*) AS 'Number of Cars',
d.ManufacturerName AS 'Make',
d.Name AS 'Model',
c.name AS 'Car Class'
FROM CarRating a
INNER JOIN OwnedCar b ON a.OwnedCarID = b.OwnedCarID
INNER JOIN CarClass c ON a.CarClassID = c.CarClassID
INNER JOIN BaseCar d ON b.BaseCarID = d.BaseCarID
WHERE
@myDate < a.ExpiredWhen AND @myDate >= a.EffectiveWhen
GROUP BY
d.Name, c.name,d.ManufacturerName
前述したように、クエリについては 11 秒かかります。複数の日付に対してこのクエリを実行するために、日付テーブルを使用し、それを上記のクエリに相互適用しています。
SELECT [DATE], b.* FROM DimDate
CROSS APPLY
(SELECT
COUNT(*) AS 'Number of Cars',
d.ManufacturerName AS 'Make',
d.Name AS 'Model',
c.name AS 'Car Class'
FROM CarRating a
INNER JOIN OwnedCar b ON a.OwnedCarID = b.OwnedCarID
INNER JOIN CarClass c ON a.CarClassID = c.CarClassID
INNER JOIN BaseCar d ON b.BaseCarID = d.BaseCarID
WHERE
dimDate.Date < a.ExpiredWhen AND dimDate.Date >= a.EffectiveWhen
GROUP BY
d.Name, c.name,d.ManufacturerName) b
WHERE DimDate.Date between @StartDate and @EndDate
このクエリは、1 日でも 49 秒かかります。なぜこれが遅いのですか?これを行うより良い方法はありますか?