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写法会简洁很多,比如:
这种场景下用SELECT就得写多个cross apply (VALUES (1,'foo'), (2,'bar'), (3,'baz')) b(id, name)UNION ALL,繁琐且不够直观 - 但如果只是像示例这样的单行单值计算,两种写法功能完全等价,没有场景上的优劣之分
内容的提问来源于stack exchange,提问作者Xedni
相关产品推荐
相关产品推荐

