【发布时间】:2015-06-09 04:54:16
【问题描述】:
我需要从 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 上运行的。
【问题讨论】:
-
Related - 似乎有一些快速方法可以从
pg_class获取 PostGres 中的近似行数,而无需计算所有行数。 -
在性能方面,首先设定目标,然后编写简单明了的代码来表达你想要的。然后衡量性能,只有当它没有达到目标时,你才应该开始深入研究它。
-
第一行是什么意思?你不需要定义顺序吗?为什么只想要 300 个?
-
同时运行它们时发生了什么?执行计划(使用
explain analyze而不仅仅是explain)说明了什么? 编辑您的问题并为单个语句添加explain analyze的输出(确保已格式化)
标签: sql query-optimization amazon-redshift window-functions