2010-06-28 29 views
2

請考慮以下查詢。添加內部查詢不會更改執行計劃

select * from contact where firstname like '%some%' 

select * from 
    (select * from contact) as t1 
where firstname like '%some%' 

這兩個查詢的執行計劃是相同的,並在同一時間執行。但是,我期待第二個查詢將有不同的計劃並執行得更慢,因爲它必須從聯繫人中選擇所有數據並應用過濾器。看起來我錯了。

我想知道這是怎麼發生的?

數據庫服務器:SQL服務器2005

回答

6

「查詢優化器」是發生了什麼事情。當你運行查詢時,SQL Server使用基於成本的優化器來確定什麼可能是完成該請求的最佳方式(即它是執行計劃)。把它想象成從地點A到地點B的路線圖。從A到B可能有許多不同的方式,有些會比其他的更快。 SQL Server將鍛鍊不同的路線,以實現返回滿足查詢的數據並使用具有可接受成本的數據的最終目標。請注意,它不一定需要分析各種可能的方式,因爲這樣做會不必要的花費太多。

就你而言,優化器已經發現這兩個查詢可以摺疊成相同的東西,因此你可以得到相同的計劃。