表联接对列数据类型的性能影响

时间:2019-10-09 21:28:32

标签: google-cloud-platform google-bigquery

我想确保不会对基于BigQuery的架构设计的查询性能产生负面影响。我有两个表需要执行联接。我将用于连接表的列的类型可能是INTEGER或STRING。就我而言,STRING会更容易,因为它不需要我们的代码库中进行任何新的验证即可确保所有值均为INTEGER类型。但是,如果查询性能比在INTEGER类型列上运行联接要差得多,那么我不想在STRING类型上联接。

当联接位于STRING类型与INTEGER类型上时,BigQuery在性能上是否有较大差异?

---更新10/16 ---

我进行了一些基本分析以进行测试,结果如下:

使用公共数据集,users表具有1000万行,posts表具有3100万行

加入整数:2.78 sec elapsed, 318.1 MB processed (avg over 10 runs)

加入字符串6.77 sec elapsed, 137 MB processed (avg over 10 runs)

-结合整数查询

SELECT count(*)
FROM `bigquery-public-data.stackoverflow.users` u
JOIN `bigquery-public-data.stackoverflow.stackoverflow_posts` p
  on u.id = p.owner_user_id
WHERE RAND() < 2

(添加了where子句以避免缓存)

-连接字符串

SELECT count(*)
FROM 'bigquery-public-data.stackoverflow.users' u
JOIN 'bigquery-public-data.stackoverflow.stackoverflow_posts' p
  on u.display_name = p.owner_display_name
WHERE RAND() < 2

(添加了where子句以避免缓存)


令人惊讶的是,STRING上的JOIN表现比INTEGER差。

1 个答案:

答案 0 :(得分:4)

不,您不会看到任何明显的差异。选择适合您的用例的自然模式。