关于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
调用,它对查询性能的影响都应该很小。
如果upper
在where
子句中使用,则会给您带来麻烦。
select *
from foo
where upper(name) = 'JOHN'
在传统的SQL数据库中,这个查询将无法在name
上使用索引,这会大大降低查询速度,因为它必须扫描整个表。
然而,BigQuery不是传统的SQL数据库,它也应该表现良好。