你们中的任何人都可以指导我,哪个查询执行得更快?
第一次查询:
Select
t1.*, t2.CountDuplicate
From
Table1 t1
Inner Join
(Select
ID, Name, Count(*) as CountDuplicate
From
Table1
Group By
ID, Name) t2 on t2.Id = t1.Id
第二次查询:
Select
t1.*,
(Select Count(t2.*)
From Table1 t2
Where t2.Id = t1.Id
Group By t2.ID, t2.Name) as CountDuplicate
From
Table1 t1
答案 0 :(得分:0)
The First Query will run Faster
<强>原因:强>
第一个查询将分别执行两个查询only once
并将它们的结果集连接在一起以获得最终结果集,这是一个很好的基于干净集的方法。
另一方面,在第二个查询中,外部查询将执行一次,但内部查询将针对外部查询返回的每一行执行,例如,如果外部查询返回1000行,则内部查询将是执行了1000次。
坚持选择One。
答案 1 :(得分:0)
指定第二个查询的正确方法是:
Select t1.*,
(Select Count(*)
From Table1 t2
where t2.Id = t1.Id
) as CountDuplicate
From Table1 t1;
我不知道为什么name
中有group by
。在条件中您可能需要and t2.name = t1.name
。
子查询中不需要group by
。
哪种方法更快,取决于许多因素。要使此版本具有性能,您需要table1(id)
上的索引。但是,编写此查询的最佳方法是:
select t1.*, count(*) over (partition by id) as CountDuplicate
from table1 t1;
这应该是最好的表现。