IN子句导致查询运行缓慢

时间:2020-04-03 14:00:12

标签: sql oracle

为了获得更好的性能,我先将变量存储在Global表中,然后在子查询中使用它,但这是相反的-性能非常慢。如果删除IN子句,查询性能会更快。我还有其他方法可以在IN子句下使用不同的方式来优化性能,也可以通过任何建议来提高性能。感谢您的帮助。

Insert into GlobalTempTable(
  BranchID; //inserting branchID in gtt, this is not required and can be null
); 

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate, Employee.EmpName
FROM Orders
JOIN Customers ON Orders.CustomerID=Customers.CustomerID;
JOIN Employee ON Customers.SalesID = Employee.EmpID;
WHERE Orders.OrDate <= '2020-04-01'
AND (BranchID IS NULL or Employee.BranchID IN (SELECT BranchID FROM GlobalTempTable )); //this IN clause is 
causing query to run slow

1 个答案:

答案 0 :(得分:1)

尝试替换为EXISTS

EXISTS ( SELECT 1 FROM GlobalTempTable gtt Employee.BranchID = gtt.BranchID )

并确保您在GlobalTempTable(BranchID)上有一个索引。