0

最近、SQL Server 2008 で実際の値ではなく、フィルターで変数を参照すると、クエリが大幅に遅くなることに気付きました。たとえば、次のようになります。

SELECT table_A.fruit
, SUM(table_B.units)
FROM table_A LEFT JOIN table_B
ON table_A.fruit = table_B.fruit_name
WHERE time_of_sale BETWEEN '2012-11-01' AND '2012-11-25'

よりも速い

DECLARE @date1 DATE = '2012-11-01'
, @date2 DATE = '2012-11-25'

SELECT table_A.fruit
, SUM(table_B.units)
FROM table_A LEFT JOIN table_B
ON table_A.fruit = table_B.fruit_name
WHERE time_of_sale BETWEEN @date1 AND @date2

クエリをこれに変更すると、最初に投稿したクエリと同じくらい高速になります。

DECLARE @date1 DATE = '2012-11-01'
, @date2 DATE = '2012-11-25'

DECLARE @exec VARCHAR(8000)

SELECT @exec =
'
SELECT table_A.fruit
, SUM(table_B.units)
FROM table_A LEFT JOIN table_B
ON table_A.fruit = table_B.fruit_name
WHERE time_of_sale BETWEEN ''' + @date1 + ''' AND ''' + @date2 + '''
'
EXEC(@exec)
4

0 に答える 0