Snowflake SQL性能对比:SELECT *子查询与指定字段子查询孰快?
Snowflake两段SQL语句性能差异分析
- 性能结论:第二段SQL的执行效率更高,实际运行速度会比第一段快。
- 具体原因:
- 第一段内层用
select *会读取tablea的全部50列,哪怕外层只需要col1和col2。虽然Snowflake的查询优化器可能会做列裁剪优化,但select *会让优化器多一步判断处理,而且如果/*AdditionalLogc*/里有复杂逻辑(比如关联、自定义计算),多余列的读取会占用更多IO、内存和网络资源,拖慢执行速度。 - 第二段内层直接指定
col1, col2,从源头上只读取需要的列,完全避免了不必要的数据加载,数据处理量级更小,不管优化器有没有额外优化,这种写法都能保证最低的资源消耗,性能表现更稳定。
- 第一段内层用
- 特殊情况补充:如果
/*AdditionalLogc*/只是简单的过滤(比如where col3 = 'test'),Snowflake优化器可能会把第一段的select *自动优化成只读取col1、col2、col3,但这种优化依赖优化器的判断逻辑,不如第二段的显式写法可靠,不会因为优化器的判断波动影响性能。
内容的提问来源于stack exchange,提问作者Srinivasarao Kotipatruni
相关产品推荐
相关产品推荐

