计算效率-I / O

时间:2019-05-08 14:47:33

标签: sql google-bigquery

如果我有两个查询,为什么第二个查询比第一个查询在计算效率上更高(就I / O而言):

第一个查询仅返回八个字段,运行时间为1.1秒,处理115.6mb。但是,第二个记录返回了超过一百万条记录,但运行时间仅为3.4秒,并且只能访问8.2mb。

随着我开始使用大得多的数据池,我真的在试图更有效地理解编写查询。谢谢!

SELECT
  *
FROM
  `table1`
LIMIT
  10;
SELECT
  id
FROM
  `table1`

1 个答案:

答案 0 :(得分:2)

BigQuery基本上是一个列式数据库(虽然不完全正确,但这是一个有用的近似值)。即,它分别存储每一列。因此,访问一列仅需要查找和读取该列。访问多个列需要找到所有这些列并读取它们-即使您只想要一个值。

这不仅是性能的函数。列数还决定计费。对于其他数据库的用户,在以下情况下可能真的令人惊讶:

select t.*
from t
limit 10;

最终花费$ 10或$ 100,因为t确实很大。但是:

select count(id)
from t;

几乎不花任何费用。

另一个要注意的是:当您在查询中多次引用一个表时,只需为一次访问付费。因此,自联接并不比直接从表中选择昂贵。