[英]SELECT DISTINCT Inside WHERE IN clause performance
我对以下代码有一个性能问题...
SELECT*FROM GCL_Loans WHERE Loan_ID IN
(
SELECT Loan_ID FROM GCL_Loan_Items
)
GCL_Loans
有一个包含基本信息的贷款列表CCL_Loan_Items
包含有关贷款中特定项目的信息。 GCL_Loan_Items 中可能存在重复的GCL_Loan_Items
谁能解释为什么这个查询会比上面的查询更快或更慢?
SELECT*FROM GCL_Loans WHERE Loan_ID IN
(
SELECT DISTINCT Loan_ID FROM GCL_Loan_Items
)
“DISTINCT”版本可能更快,因为IN
子句将有一个较小的数据集来搜索以确定是否有任何给定的GCL_Loans.Loan_ID
在集合中。 没有DISTINCT
,数据DISTINCT
更大。
有一个相当好的论点,即查询优化器将自动识别IN
测试是设置方式,而不是列表方式测试,并在自动索引期间执行 DISTINCT ......但我以前见过失败。
请注意,这里的子选择也可能失败,因为某些数据库 (mysql) 会为主选择中的每个元素执行子选择。
两者的计划和绩效是平等的
因为通过选择 DISTINCT,SUBQuery (IN) 中的条件较少。 我的理解是 SQL 将首先运行子查询以生成要包含在 IN 中的项目列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.