interchanging-from和inner-join

ahy6op9u  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(266)

我有以下两个sql查询:
1.

"""
SELECT a.id, a.body, a.owner_user_id
FROM `bigquery-public-data.stackoverflow.posts_questions` AS q 
INNER JOIN `bigquery-public-data.stackoverflow.posts_answers` AS a
ON q.id = a.parent_id
WHERE q.tags LIKE '%bigquery%'
"""
"""
SELECT a.id, a.body, a.owner_user_id
FROM `bigquery-public-data.stackoverflow.posts_answers` AS a
INNER JOIN `bigquery-public-data.stackoverflow.posts_questions` as q
ON q.id = a.parent_id
WHERE q.tags LIKE "%bigquery%"
"""

我知道第二个更贵。我想知道为什么会这样。
我猜-在1 post_questions 首先检索,我们只需要在问题ID上循环,但是在2中,我们需要在答案父ID上循环。既然答案比问题多得多,第二个答案就要贵得多。
我说得对吗?另外,我假设两个查询的最终结果是相同的,对吗?

s1ag04yj

s1ag04yj1#

这两个查询在语法上是等价的(因此它们产生相同的结果)。我不知道是什么让你觉得一个比另一个贵,但事实肯定不是这样。
sql是一种描述性语言,而不是过程性语言。你告诉数据库你想要的结果,让它决定如何继续。查询规划器解析查询并生成它认为最好的执行计划。它很乐意从一个表或另一个表“开始”,而不管它们在查询中出现的顺序如何。

piah890a

piah890a2#

在bigquery中,这两个函数的开销应该完全相同。我假设您使用的是“按需”定价,因为这个问题不适用于固定费率定价模式。
bigquery根据处理查询所读取的字节数收费,而不是根据查询的复杂性收费。事实上,多个引用同一个表并不影响价格。但是,引用的列数确实会影响价格。
两个查询都引用相同的表和列,因此成本应该相同。
您可以在文档中查看bigquery如何计算价格。

相关问题