我在创建这个帖子时得到了一个标志,因为它是主观的,所以它可能会被关闭,所以我希望我在这里不违反任何规则......但是这里有:
我有一个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]
变得更大时,哪一项会更好?
答案 0 :(得分:1)
可能是第二个 - 因为它不需要第二次通过表。一旦它足够大就可以了。可能永远不会出现这种情况(百万行的差异应该可以忽略不计)。
答案 1 :(得分:1)
在这两种情况下,您的临时表中只有一行(因为您在没有显式分组的情况下插入聚合函数的结果)。更新表中包含单行所需的时间通常是不可察觉的 - 因此这两种方法实际上可能总是花费相同的时间长度。