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

SQL查询可选运行派生表时WHERE子句与JOIN条件过滤数据哪种更快

结论

示例2(在派生表WHERE子句中加短路逻辑)的执行速度更快,尤其是@fetchPricingData = 'No'的时候优势特别明显。

原因
  • 参数为No时,示例2里派生表的WHERE @fetchPricingData = 'Yes'明显是永远不成立的条件,数据库优化器一眼就能认出来,根本不会去扫描pricing_info表的任何数据,也不用跑派生表里的其他查询逻辑,直接返回个空结果集就行,后面JOIN关联空表的开销可以忽略。
  • 示例1把判断放到了JOIN的ON条件里,优化器没法提前砍掉派生表的执行逻辑:得先把派生表的查询全跑完,把pricing_info里符合要求的数据全读出来生成临时结果集,等到关联的时候才发现条件永远不成立,把所有关联行都过滤掉,等于白花了读定价表、生成临时表的IO和内存开销。
  • 如果参数是Yes,两种写法速度差不多,这时候条件都成立,优化器都会正常查定价表再做关联,没什么额外开销。

注:这个性能差异是通用的,SQL Server、PostgreSQL、MySQL 8.0+这些主流数据库的优化器都支持这种恒假条件的提前剪枝优化,不用担心兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:45:03