为了获得更好的性能,我先将变量存储在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
答案 0 :(得分:1)
尝试替换为EXISTS
:
EXISTS ( SELECT 1 FROM GlobalTempTable gtt Employee.BranchID = gtt.BranchID )
并确保您在GlobalTempTable(BranchID)
上有一个索引。