【发布时间】:2020-02-02 11:17:23
【问题描述】:
我正在过滤一个名为 mycolumn 的字符串列。我可以想到以下 3 种过滤方式,哪一种会获得更好的性能?
-- method #1
where
( mycolumn = 'FixedStringA.FixedStringB.VariableStringA.FixedString'
OR mycolumn = 'FixedStringA.FixedStringB.VariableStringB.FixedString'
OR mycolumn = 'FixedStringA.FixedStringB.VariableStringC.FixedString'
OR mycolumn = 'FixedStringA.FixedStringB.VariableStringD.FixedString' );
-- method #2
where mycolumn like '%//.FixedString';
-- method #3
where split(mycolumn,'//.')[3] = 'FixedString';
请知道 FixedStringA 和 FixedStringB 就像常量一样,它们的值将保持固定,这就是为什么称它们为固定字符串。而且 mycolumn 不是您信息的分区键。
【问题讨论】:
-
如果您的过滤器一直是静态的,我建议使用方法 #1,这可以为您节省时间/性能。或者,如果您有需要更改过滤条件的情况,最好使用方法 #2 和方法 #3,它们是一种正则表达式类型。
标签: sql hive query-optimization hiveql where-clause