sql-server-2008 - SQL 性能 - 按多个字段分组

标签 sql-server-2008

我想知道哪个更好和/或更快。在下面,customer_id 是主键。按主键和其他 5 个字段分组,或者仅按主键分组,然后进行连接以获取其他字段。或者这是一个“视情况而定”的问题?

select customer_id, customer_name, customer_address, 5 other description fields.., 
  sum(amount) as SalesAmount
from customer c
inner join orders o
 on o.customer_id = c.customer_id
group by customer_id, customer_name, customer_address, 5 other description fields..

对比
select customer_id, customer_name, customer_address, 5 other description fields..,
     SalesAmount
from 
(
   select customer_id,
   sum(amount) as SalesAmount
   from customer c
   inner join orders o
     on o.customer_id = c.customer_id
   group by customer_id
) t
inner join customer c
   on c.customer_id = t.customer_id

最佳答案

这是一个依赖问题。后一种变体将再执行一次连接,这可能会更慢。但是如果你从这个 join 得到的额外数据很大,它可以更快,因为分组操作不需要对所有数据进行 shuffle。

所以你看,两种变体都有比另一个更快的场景。你需要测量。

我的猜测是,对于真实数据和查询,第一个变体通常要快得多。

关于sql-server-2008 - SQL 性能 - 按多个字段分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591497/

相关文章:

vb.net - 我可以在 .NET 中通过 SqlConnection 设置 DEADLOCK_PRIORITY 吗?

asp.net-mvc-3 - 编辑连接字符串 MVC3 LINQ

SQL Server : select distinct mon-yyyy format output sorty by descending order

sql - 在 join in sql 中计算

SQL Server 2008 - XML 节点中的 sql_variant.value

sql-server - 使用存储过程从 vb.net 传递参数

sql-server-2008 - 远程访问sql server的安全风险?

php - 计算其中的行数以查找特定值的行数

sql - 使用like语句和通配符在SQL SERVER中查找 "&"字符

sql - 想要透视表。并生成动态 SQL 字符串并执行