我有一个很大的表,该表有一列,其中包含每一行的字符串类型的自定义ID。对于每个ID,该表中都有50个属性。保证在表中是唯一的。
我的主要任务是获取给定ID的行中的那50个属性。 当我运行如下所示的普通查询时,只扫描100万行需要5秒钟。
SELECT * FROM `mytable` WHERE id='123'
根据我的理解,BigQuery在将行划分为不同的簇之后进行并行搜索。而且我相信对于给定的ID值,它将检查所有不同群集中的所有行。这样,即使在一个分区中找到匹配项,其他群集也将继续获得其他匹配项。
但是,由于ID列中的值在此处是唯一的,因此一旦在集群中找到匹配项,我们是否可以以某种方式“破坏”在其他集群上运行的作业,并返回该行。
我希望这将加快查询运行时间。 而且,将来,此表将变得非常大,因此,如果能够做到这一点,将对我的目的真的很有帮助。
欢迎提出任何建议。
答案 0 :(得分:3)
您可以使用最近推出的Clustered Tables
这将使您降低成本并提高性能
请注意:当前仅对分区表支持群集-但正在开发对clustering non-partitioned tables
的支持
如果表已分区,则可以按id将其群集-完成后
如果没有,您可以通过它引入“假”日期字段并对其进行分区,以便对该表进行聚类
平均时间,如果您只是对给定ID的一行感兴趣,请尝试以下
SELECT * FROM mytable WHERE id='123' LIMIT 1