1

2012 年から日付までの売上データを保持するビューがあります。現在の年 (2013 年) の売上のみを表示するクエリを作成する必要があります。

これは私が最初の段階で試したことです

SELECT * 
FROM [Sales_Data] 
WHERE invoiceDate  between '2013-01-01' and '2013-12-31' 

このクエリはデータをロードするのに2秒かかりますが、手動で更新する必要のないデータを取得するようにクエリを変更しましたが、これはネットで見つけたものです:

select * from [Sales_Data]  
where datepart(yyyy,invoiceDate) =datepart(yyyy,getdate()) 
and datepart(yyyy,invoiceDate) =datepart(yyyy,getdate())

その結果、このクエリはデータを表示するのにかなり長い時間がかかります (9 秒)。より短い時間でデータを定義して取得するためのより良いクエリがあれば教えてください。

4

1 に答える 1

2

2 番目のクエリでは、SQL Server がクエリ対象の各行に対して計算を実行する必要があります。

次のクエリは、元の select ステートメントにより厳密に一致します。

select * from [Sales_data]
where invoiceDate between DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) --- First Day of current year
and DATEADD(MILLISECOND, -3,DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0)) --- Last Day of current year

クエリを実行しているビューで何が起こっているかによっては、invoiceDate フィールドを含むインデックスを使用することでメリットが得られる場合もあります。

クエリの実行時に生成された実行計画を確認して、クエリの実行時にバックグラウンドで何が起こっているかを確認することができます。

于 2013-01-21T05:40:49.167 に答える