我有以下两个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上循环。既然答案比问题多得多,第二个答案就要贵得多。
我说得对吗?另外,我假设两个查询的最终结果是相同的,对吗?
2条答案
按热度按时间s1ag04yj1#
这两个查询在语法上是等价的(因此它们产生相同的结果)。我不知道是什么让你觉得一个比另一个贵,但事实肯定不是这样。
sql是一种描述性语言,而不是过程性语言。你告诉数据库你想要的结果,让它决定如何继续。查询规划器解析查询并生成它认为最好的执行计划。它很乐意从一个表或另一个表“开始”,而不管它们在查询中出现的顺序如何。
piah890a2#
在bigquery中,这两个函数的开销应该完全相同。我假设您使用的是“按需”定价,因为这个问题不适用于固定费率定价模式。
bigquery根据处理查询所读取的字节数收费,而不是根据查询的复杂性收费。事实上,多个引用同一个表并不影响价格。但是,引用的列数确实会影响价格。
两个查询都引用相同的表和列,因此成本应该相同。
您可以在文档中查看bigquery如何计算价格。