具有相同结果的两个查询执行时间差异很大?

时间:2018-04-18 06:30:03

标签: sql amazon-redshift

我目前正在使用红移。我试图执行查询以从名为id_number的VARCHAR列计算名为id(数据类型为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的位置如何影响执行时间的差异?

1 个答案:

答案 0 :(得分:2)

你的两个问题完全不同。

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

第二个选择10000行(没有强制执行特定排序),然后对它们进行排序以计算rank()

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

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