假设我有这样的查询:
SELECT COUNT(*) FROM Investors
WHERE 1=1
AND
(
investerName IN (SELECT investerName FROM Assets WHERE Assets.CompanyID=Investors.CompanyID AND Assets.CompanyID = @companyID )
OR investerName IN
(
SELECT investerName FROM InvestmentEnrollments WHERE InvestmentEnrollments .CompanyID=Investors.CompanyIDAND InvestmentEnrollments .state IN (3,4) AND InvestmentEnrollments.CompanyID = @companyID
)
)
AND Investors.CompanyID=@companyID
和另一个类似的查询:
SELECT COUNT(*) FROM Investors
WHERE 1=1
AND
(
investerName IN (SELECT investerName FROM Assets WHERE Assets.CompanyID=Investors.companyID AND Assets.companyID = @companyID )
OR investerName IN
(
SELECT investerName FROM InvestmentEnrollments WHERE InvestmentEnrollments .companyID=Investors.companyID AND InvestmentEnrollments.state IN (3,4) AND InvestmentEnrollments.companyID = @companyID
)
)
AND Investors.companyID=@companyID
AND Investors.userName = @someInvestorUserName
这两个查询非常相似,但第二个查询有额外的 where 谓词。那么在这种情况下 SQL Server 会做什么呢?它是否尝试将两者都放入同一个查询计划中?或者这些被认为是需要不同查询计划的两个不同查询?