You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中Cross Apply使用VALUES与SELECT的优劣对比及选择理由

Cross Apply中VALUES vs SELECT:选择依据与优劣对比

针对你提出的问题,以下从性能、可读性、适用场景三个维度对比两种写法:

性能:完全等价,无差异

在SQL Server(你的示例是T-SQL语法)中,这两种写法会被查询优化器解析为完全相同的执行计划。不管是CPU使用率、磁盘IO开销还是实际执行时间,两者表现几乎一致——本质上都是为外部查询的每一行计算单个标量值,优化器不会因为写法不同产生区别对待。

可读性:主观偏好,SELECT更贴近常规逻辑

可读性完全取决于个人或团队的编码习惯:

  • 你觉得SELECT写法可读性更强是完全合理的:它用列名=表达式的形式,和普通SELECT查询的语法逻辑一致,对大多数SQL开发者来说更直观,理解成本更低
  • VALUES写法需要在子句末尾额外指定列别名(比如b (Index1)),对于习惯常规查询的人来说,确实需要额外适应

如果团队没有统一规范,选自己读着顺的写法即可。

适用场景:VALUES更适合构造多行列数据集

两种写法的适用场景有细微区别:

  • 当需要一次性构造多行多列的数据集时,VALUES写法会简洁很多,比如:
    cross apply (VALUES (1,'foo'), (2,'bar'), (3,'baz')) b(id, name)
    
    这种场景下用SELECT就得写多个UNION ALL,繁琐且不够直观
  • 但如果只是像示例这样的单行单值计算,两种写法功能完全等价,没有场景上的优劣之分

内容的提问来源于stack exchange,提问作者Xedni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:00:17