为何BigQuery按主键id聚簇未减少查询扫描数据量?
问题原因解释
BigQuery的最小扫描单位是微分区:BigQuery的存储单元是微分区(micro-partition),每个微分区压缩后大小在50MB到1GB之间。无论表是否聚簇,查询时只能以整个微分区为单位扫描,无法只扫描单一行。如果目标
id=59804在未聚簇时所在的微分区,和聚簇后所在的微分区大小相近,扫描的数据量自然没有差异——都是扫描一整个包含该id的微分区。唯一id聚簇的局限性:当
id是唯一整数时,聚簇操作只是把id按顺序排列到微分区中,但每个微分区依然会包含大量连续id的行(比如一个微分区可能装下10万行连续id的记录)。你查询单个id时,还是需要扫描整个包含该id的微分区,这和未聚簇时(该id随机落在某个微分区里)的扫描量完全一致。聚簇的适用场景不匹配:聚簇的优势体现在范围查询或重复值较多的列过滤场景。比如如果你的查询是
where id between 50000 and 60000,聚簇后就能只扫描包含这个id范围的几个微分区;但单个唯一id的查询,聚簇无法减少扫描的微分区数量,因此扫描量不变。
内容的提问来源于stack exchange,提问作者Daria
相关产品推荐
相关产品推荐

