繁体   English   中英

where子句的最佳实践

[英]Best practice for where clause

假设我有一个带有以下字段的合同表ContractContractIdProductIDProductType 在同一个ContractId的表中,我有两个可能的ProductID 所有表中都填充了两个可能的ProductTypeType1Type2

以一种或另一种方式执行以下查询的原因是什么?

方法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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM