CASE优化中的BigQuery函数



关于BigQuery引擎和CASE优化的问题。

在以下查询中:

SELECT
CASE WHEN UPPER(name) = 'JOHN' THEN 1
WHEN UPPER(name) = 'MIKE' THEN 2
WHEN UPPER(name) = 'RON' THEN 3
ELSE 4 END AS score
FROM
table

在每个WHEN上使用UPPER函数是否会为每个WITH消耗计算能力?或者BigQuery引擎知道如何优化它?

避免关注-直接使用

SELECT
CASE UPPER(name)
WHEN 'JOHN' THEN 1
WHEN 'MIKE' THEN 2
WHEN 'RON' THEN 3
ELSE 4
END AS score
FROM
table     

同时,我希望BigQuery引擎知道如何在你的问题中优化版本:0)

upper本身将使用少量的CPU。这是一个非常简单的函数。如何使用它不需要访问磁盘(见下文)。无论BigQuery是否将其优化为单个upper调用,它对查询性能的影响都应该很小。


如果upperwhere子句中使用,则会给您带来麻烦。

select *
from foo
where upper(name) = 'JOHN'

在传统的SQL数据库中,这个查询将无法在name上使用索引,这会大大降低查询速度,因为它必须扫描整个表。

然而,BigQuery不是传统的SQL数据库,它也应该表现良好。

最新更新