为什么“使用无限制的 order by”被认为是 bigquery 中的反模式?

问题描述 投票:0回答:1

Google 的 BigQuery 反模式识别工具 表示“使用无 LIMIT 的 ORDER BY”是一种反模式。为什么?我可以想象相反的情况是一种反模式,有点,但是按顺序列出所有内容有什么问题吗?

官方文档说“如果您要订购大量值但不需要返回所有值,请使用 LIMIT 子句。例如,以下查询订购一个非常大的结果集并抛出异常资源超出错误。查询按 mytable 中的标题列排序。标题列包含数百万个值。”

但这对我来说仍然没有意义:无论施加的限制如何,引擎仍然必须执行排序,不是吗?限制始终是查询中要执行的最后一个操作,不是吗?有序结果集是有限的,而不是相反。

我错过了什么?

sql google-cloud-platform google-bigquery
1个回答
0
投票
我可以回答这个问题。

我错过的关键点是 BigQuery 是一种高度分布式的技术。它也以分布式方式进行排序:想想map/reduce。数据集不同部分的排序发生在不同的节点上。如果给定限制,查询优化器会提前知道它不需要数据集的某些部分,因此它可以丢弃它们,从而释放工作节点来执行无用的工作。

非常简洁,让我对 BigQuery 的内在魔力有了一些了解。我希望谷歌能更清楚地传达这些事情。

© www.soinside.com 2019 - 2024. All rights reserved.