以下两个查询之间是否存在性能差异?如果是,那么哪个更好?:
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速度更快。
group by
分组依据应该更快。行号必须为表中的所有行分配一行。它会在过滤掉不需要的内容之前执行此操作。
到目前为止,第二个查询是更好的结构。首先,必须确保partition子句中的列与所需的列匹配。更重要的是,“分组依据”是SQL中一个易于理解的构造。我还要推测,group by可能会更好地利用索引,但这只是推测。