[英]Best practice for where clause
假设我有一个带有以下字段的合同表Contract
: ContractId
, ProductID
, ProductType
。 在同一个ContractId
的表中,我有两个可能的ProductID
。 所有表中都填充了两个可能的ProductType
: Type1
和Type2
。
以一种或另一种方式执行以下查询的原因是什么?
方法1:
select c1.ProductID, c2.ProductID
from Contract as c1 left join Contract as c2 on c1.ContractId=c2.ContractId
where c1.ProductType <>'Type2'
方式2:
select c1.ProductID, c2.ProductID
from Contract as c1 left join Contract as c2 on c1.ContractId=c2.ContractId
where c1.ContractId not in (select ContractId from Contract where ProductType = 'Type2')
感谢您的聪明回答!
方式1既易于阅读,又易于数据库引擎优化。
查询2使用子查询,并且性能将比查询1的性能低,查询1仅检查条件而不从表中进一步获取数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.