我有一个使用视图来提取 6 个平均值的存储过程。SQL 数据库是 SQL Server 2000。当我在查询分析器中运行它时,大约需要 9 秒。我该怎么做才能获得更好的性能?我应该使用 LINQ 返回行并以这种方式确定平均值吗?会更快吗?
这是我当前存储过程的一个示例:
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
另外,让我澄清一下上述观点。因为这是 SQL Server 2000,所以我不能使用索引视图,因为它确实使用了子查询。我想这可以重写为使用连接。但是,上次我们进行查询并重写它以使用连接时,数据丢失了(因为子查询可以返回一个空值,这将省略整行)。