OVER()vs两个查询 - 哪个最有效

时间:2015-06-09 04:54:16

标签: sql query-optimization amazon-redshift window-functions

我需要从10MM行表中拉回前300行,并获取匹配记录总数的计数。

我可以在两个查询中执行此操作,例如:

SELECT * FROM table WHERE field = value LIMIT 300;
SELECT count(*) FROM table WHERE field = value;

或者我可以使用OVER():

SELECT *, COUNT(*) OVER() AS total FROM table WHERE field = value LIMIT 300;

哪种效率最高?我不关心是否需要运行两个查询,我是最有效的解决方案之后。我不是专家,我试图运行“解释”,但这对我来说没有多大意义。这是在Amazon Redshift上运行的。

1 个答案:

答案 0 :(得分:0)

如果您的SortKey是时间戳字段,则运行效率最高的是

select *
from(
select * , count(*) over() as total,
row_number () over(order by timestamp) as rank
from table
where filed =value)
where rank<301