我对以下代码有性能问题......
SELECT*FROM GCL_Loans WHERE Loan_ID IN
(
SELECT Loan_ID FROM GCL_Loan_Items
)
GCL_Loans
有一个包含基本信息的贷款清单
CCL_Loan_Items
包含有关贷款中特定项目的信息。 GCL_Loan_Items
有人可以解释为什么这个查询会比上面的查询更快或更慢吗?
SELECT*FROM GCL_Loans WHERE Loan_ID IN
(
SELECT DISTINCT Loan_ID FROM GCL_Loan_Items
)
答案 0 :(得分:1)
“DISTINCT”版本可能更快,因为IN
子句将有一个较小的数据集来搜索以确定集合中是否有任何给定的GCL_Loans.Loan_ID
。如果没有DISTINCT
,数据集会更大。
有一个相当不错的论据可以让查询优化器自动识别IN
测试是一个集合,而不是列表测试,并在自动索引期间执行DISTINCT ......但是已经看到过之前失败了。
请注意,子选择在这里也可能是失败的,因为某些数据库(mysql)将为主要选择中的每个元素执行子选择。
答案 1 :(得分:0)
两者的计划和绩效是平等的
答案 2 :(得分:-1)
因为通过选择DISTINCT,SUBQuery(IN)中的条件较少。 我的理解是SQL将首先运行子查询以生成要包含在IN中的项列表。