如果我有两个查询,为什么第二个查询比第一个查询在计算效率上更高(就I / O而言):
第一个查询仅返回八个字段,运行时间为1.1秒,处理115.6mb。但是,第二个记录返回了超过一百万条记录,但运行时间仅为3.4秒,并且只能访问8.2mb。
随着我开始使用大得多的数据池,我真的在试图更有效地理解编写查询。谢谢!
SELECT
*
FROM
`table1`
LIMIT
10;
SELECT
id
FROM
`table1`
答案 0 :(得分:2)
BigQuery基本上是一个列式数据库(虽然不完全正确,但这是一个有用的近似值)。即,它分别存储每一列。因此,访问一列仅需要查找和读取该列。访问多个列需要找到所有这些列并读取它们-即使您只想要一个值。
这不仅是性能的函数。列数还决定计费。对于其他数据库的用户,在以下情况下可能真的令人惊讶:
select t.*
from t
limit 10;
最终花费$ 10或$ 100,因为t
确实很大。但是:
select count(id)
from t;
几乎不花任何费用。
另一个要注意的是:当您在查询中多次引用一个表时,只需为一次访问付费。因此,自联接并不比直接从表中选择昂贵。