哪个查询更快:在 Amazon Redshift 中使用 order by 时 top X 或 limit X

Posted

技术标签:

【中文标题】哪个查询更快:在 Amazon Redshift 中使用 order by 时 top X 或 limit X【英文标题】:Which query is faster : top X or limit X when using order by in Amazon Redshift 【发布时间】:2017-06-16 06:03:22 【问题描述】:

3 个选项,在由时间戳插入的事件表上。

哪个查询更快/更好?

    Select a,b,c,d,e.. from tab1 order by timestamp desc limit 100

    Select top 100 a,b,c,d,e.. from tab1 order by timestamp desc

    Select top 100 a,b,c,d,e.. from tab1 order by timestamp desc limit 100

【问题讨论】:

【参考方案1】:

当您提出这样的问题时,EXPLAIN 语法很有帮助。只需在查询的开头添加此关键字,您就会看到一个查询计划。在情况 1 和 2 中,计划将完全相同。这些是 SQL 语法的变体,但 SQL 的内部解释器应该根据物理执行请求的操作生成相同的查询计划。

更多关于EXPLAIN命令在这里:EXPLAIN in Redshift

【讨论】:

【参考方案2】:

您可以通过在示例数据集上运行这些查询来获得结果。以下是我的观察:

    类型 1:5.54s、2.42s、1.77s、1.76s、1.76s、1.75s 类型 2:5s、1.77s、1s、1.75s、2s、1.75s 类型 3:是无效的 SQL 语句,因为您使用了两个 LIMIT 子句

如您所见,这两个查询的结果是相同的,因为它们都经过了查询引擎的内部优化。

【讨论】:

【参考方案3】:

显然TOPLIMIT 都做了类似的工作,所以您不必担心使用哪一个。

更重要的是基础表的设计,尤其是在使用WHEREJOIN 子句的情况下。在这种情况下,您应该仔细选择您的 SORTKEYDISTKEY,这对 Amazon Redshift 的性能的影响要比 TOP/LIMIT 之类的简单语法差异大得多。

【讨论】:

在使用GROUP BYORDER BY 时也要小心。这些可以很容易地迫使数据库在返回几行之前做很多工作。 谢谢,是的,使用 order by 通常会减慢速度。当然,在这种情况下,我使用时间图作为排序键

以上是关于哪个查询更快:在 Amazon Redshift 中使用 order by 时 top X 或 limit X的主要内容,如果未能解决你的问题,请参考以下文章

在 Amazon Redshift 中按日期透视查询

不使用 jdbc 驱动程序查询 Amazon Redshift

使用 Amazon Redshift / PostgreSQL 进行漏斗查询

同时对 Amazon Redshift 和本地源运行查询

如何(以编程方式)知道何时在 PostgreSQL/Amazon Redshift 上完成查询?

使用查询编辑器在 Amazon Redshift 上创建数据库