【发布时间】:2022-12-06 02:53:16
【问题描述】:
在过滤大型表时,执行自连接与 case 表达式之间是否存在性能差异?例如,我有一个姓名和职业列表,我想创建一个只有当某人是医生时才填充的列。
我通过两种方式做到了这一点:
- 案例
select name , case when profession = 'doctor' then profession else null end as is_doctor from professions- 左连接...在哪里
select name , is_doctor from professions left join ( select name , profession from professions where profession = 'doctor' ) d on professions.name = d.name我知道 WHERE 往往比 CASE WHEN 成本更低,但 LEFT JOIN 可能会使它变慢。第一个更具可读性,但我想知道第二个是否更有效率。
【问题讨论】:
-
为什么不用数据自己测试一下,但是恕我直言
-
只有高端数据库引擎才能确定第二个查询等同于第一个查询(便宜得多)。典型的数据库(SQL Server、MySQL、Sybase 等)将无法优化第二个,而且它们会慢得多。
标签: sql postgresql