小编典典

将GROUP BY与MAX()用作聚合vs ROW_NUMBER优于分区by,在性能上有区别吗?

sql

以下两个查询之间是否存在性能差异?如果是,那么哪个更好?:

    select 
    q.id, 
    q.name 
    from(
        select id, name, row_number over (partition by name order by id desc) as row_num
from table
    ) q
        where q.row_num = 1

相对

select
max(id) ,
name
from table
group by name

(结果集应该相同)

这是假设没有设置索引。

更新:我对此进行了测试,并且group by速度更快。


阅读 41

收藏
2021-04-07

共1个答案

小编典典

分组依据应该更快。行号必须为表中的所有行分配一行。它会在过滤掉不需要的内容之前执行此操作。

到目前为止,第二个查询是更好的结构。首先,必须确保partition子句中的列与所需的列匹配。更重要的是,“分组依据”是SQL中一个易于理解的构造。我还要推测,group
by可能会更好地利用索引,但这只是推测。

2021-04-07