SQL最佳实践 - 在SELECT中更新或计算

时间:2016-03-09 15:51:56

标签: sql-server sql-server-2014

我在创建这个帖子时得到了一个标志,因为它是主观的,所以它可能会被关闭,所以我希望我在这里不违反任何规则......但是这里有:

我有一个SQL查询(SQL Server 2014),它执行平均价格计算,并且想知道以下哪项是最佳实践。

选项1:

CREATE TABLE #Test
(
ItemCount INT
,ItemTotal MONEY
,AvgPrice MONEY
)

INSERT #Test
SELECT
COUNT(Item)
,SUM(ItemPrice)
,0
FROM [table]

UPDATE #Test
SET AvgPrice = ItemTotal/ItemCount

选项2:

CREATE TABLE #Test
(
ItemCount INT
,ItemTotal MONEY
,AvgPrice MONEY
)

INSERT #Test
SELECT
COUNT(Item)
,SUM(ItemPrice)
,CAST(SUM(ItemPrice) AS FLOAT)/CAST(COUNT(Item) AS FLOAT)
FROM [table]

当前数据位于[table]时,这些数据的运行时间相同且结果相同,但当[table]变得更大时,哪一项会更好?

2 个答案:

答案 0 :(得分:1)

可能是第二个 - 因为它不需要第二次通过表。一旦它足够大就可以了。可能永远不会出现这种情况(百万行的差异应该可以忽略不计)。

答案 1 :(得分:1)

在这两种情况下,您的临时表中只有一行(因为您在没有显式分组的情况下插入聚合函数的结果)。更新表中包含单行所需的时间通常是不可察觉的 - 因此这两种方法实际上可能总是花费相同的时间长度。