0

次のようなクエリがあるとします。

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

どちらのクエリもよく似ていますが、2 番目のクエリには where 述語が追加されています。この場合、SQL Server は何をするのでしょうか? 両方を同じクエリ プランに適合させようとしますか? それとも、これらは異なるクエリ プランを必要とする 2 つの別個のクエリと見なされますか?

4

1 に答える 1

2

クエリはテキストが異なるだけでなく、意味的にも異なります。これらは別個のクエリであり、別個の実行計画が必要です。共通点はありません。

于 2014-12-11T13:27:07.337 に答える