TSQL - 任何Group By

Leo*_*rdo 2 sql t-sql sql-server

在我的150kk记录表上运行以下查询非常昂贵:

SELECT MAX(myId) 
FROM Table1 
GROUP BY C1,C2,C3 
HAVING count(1) > 1
Run Code Online (Sandbox Code Playgroud)

估计执行计划指出,排序将占操作的72%.我相信这是因为MAX.

问题是:我真的不需要MAX......我需要ANY......这应该是删除重复的记录,所以删除第一个或后来的那个记录对我来说没问题......

有没有办法"减少"排序?!?

编辑1:
我想首先检索被删除的记录(通过Id),以仔细检查是否有2列分组就足够了

Gor*_*off 6

对于此查询:

SELECT MAX(myId) 
FROM Table1 
GROUP BY C1, C2, C3 
HAVING count(1) > 1;
Run Code Online (Sandbox Code Playgroud)

尝试使用索引Table1(C1, C2, C3, myId).

要删除记录,我建议:

with todelete as (
      select t1.*,
             row_number() over (partition by c1, c2, c3 order by myid desc) as seqnum
      from table1 t1
     )
delete todelete 
    where seqnum > 1;
Run Code Online (Sandbox Code Playgroud)