ビューを使用して6つの平均をプルするストアドプロシージャがあります。SQLデータベースはSQLServer2000です。クエリアナライザーで実行すると、約9秒かかります。パフォーマンスを向上させるために何ができますか?LINQを使用して行を返し、その方法で平均を決定する必要がありますか?もっと速くなりますか?
これが私の現在のsprocの例です:
create procedure [TestAvg]
(
@CustomerNumber int
)
as
select
(select AVG(OrderTime) from OrderDetails where ProductID = 12 and DateDiff(day, DateFulfilled, GetDate()) <= 7 and CustomerNumber = @CustomerNumber) as P12D7,
(select AVG(OrderTime) from OrderDetails where ProductID = 12 and DateDiff(day, DateFulfilled, GetDate()) <= 30 and CustomerNumber = @CustomerNumber) as P12D30,
(select AVG(OrderTime) from OrderDetails where ProductID = 12 and DateDiff(day, DateFulfilled, GetDate()) <= 90 and CustomerNumber = @CustomerNumber) as P12D90,
(select AVG(OrderTime) from OrderDetails where ProductID = 16 and DateDiff(day, DateFulfilled, GetDate()) <= 7 and CustomerNumber = @CustomerNumber) as P16D7,
(select AVG(OrderTime) from OrderDetails where ProductID = 16 and DateDiff(day, DateFulfilled, GetDate()) <= 30 and CustomerNumber = @CustomerNumber) as P16D30,
(select AVG(OrderTime) from OrderDetails where ProductID = 16 and DateDiff(day, DateFulfilled, GetDate()) <= 90 and CustomerNumber = @CustomerNumber) as P16D90
また、上記の見方を明確にさせていただきます。これはSQLServer2000であるため、サブクエリを使用するため、インデックス付きビューを使用できません。これは、結合を使用するように書き直すことができると思います。ただし、前回クエリを取得して結合を使用するように書き直したとき、データが欠落していました(サブクエリがnull値を返し、行全体が省略される可能性があるため)。