当查询中没有汇总时,为什么有人使用分组依据而不是分组?
另外,有人知道分组依据与MySQL和SQL Server中不同的性能注意事项。我猜想SQL Server有一个更好的优化器,并且那里的性能可能接近同等水平,但是在MySQL中,我希望显着的性能优势能够与众不同。
我对dba答案感兴趣。
编辑:
Bill的帖子很有趣,但不适用。让我更具体一点…
select a, b, c from table x group by a, b,c
与
select distinct a,b,c from table x
来自MS SQL Server的少量(非常少量)经验数据,来自我们数据库的几个随机表中。
对于模式:
SELECT col1, col2 FROM table GROUP BY col1, col2
和
SELECT DISTINCT col1, col2 FROM table
当查询没有覆盖索引时,两种方式都会生成以下查询计划:
|--Sort(DISTINCT ORDER BY:([table].[col1] ASC, [table].[col2] ASC)) |--Clustered Index Scan(OBJECT:([db].[dbo].[table].[IX_some_index]))
当有覆盖指数时,两者都产生:
|--Stream Aggregate(GROUP BY:([table].[col1], [table].[col2])) |--Index Scan(OBJECT:([db].[dbo].[table].[IX_some_index]), ORDERED FORWARD)
因此,从这个非常小的示例中,SQL Server当然可以将两者对待。