结果相等的两个查询执行所需的时间大不相同



我目前正在使用redshift。我试图执行一个查询,从一个名为 id 的 VARCHAR 列中计算一个名为 id_number(数据类型 INTEGER(的列,以使用 id_number 而不是 id 来加速进一步的查询。

这是我尝试的第一个查询:

select rank() over (order by id) id_number, id, sid1 ,sid2
from table
limit 10000

但是,注意到此查询花费了相当长的时间,我尝试了下一个查询:

with A as(
 select id, sid1, sid2 
 from table
 limit 10000
)
select rank() over (order by id) id_number, id, sid1 ,sid2
from A

转眼间就结束了。

为什么第二个查询执行的时间如此之少,而两个查询似乎执行完全相同的事情?

如果是因为limit 10000的位置,limit的位置如何促成执行时间的差异?

您的两个查询完全不同。

第一个必须对整个表进行排序以获取rank(),然后发出结果的前 10000 行(没有强制实施特定的排序(。

第二个选择10000行(没有强制实施特定的排序(,然后对这些行进行排序以计算rank()

如果表明显大于 10000 行,则必须对所有表进行排序的第一个查询要慢得多也就不足为奇了。

查看EXPLAIN (ANALYZE, BUFFERS)输出以更好地理解这一点。

最新更新