好,所以我意識到這是一個非常模糊的問題,但忍受着我。爲什麼SQL連接選擇次優查詢計劃?
我在多次使用不同和不相關的查詢時遇到過這個問題。下面的查詢需要多少分鐘來執行:
SELECT <Fields>
FROM <Multiple Tables Joined>
LEFT JOIN (SELECT <Fields> FROM <Multiple Tables Joined>) ON <Condition>
然而,僅僅通過增加聯接提示其查詢的執行只需要幾秒鐘:
奇怪的是在連接指定的類型提示並不是真的提高了性能。這似乎是因爲該提示會導致優化器孤立地執行子查詢,然後加入。如果爲子查詢創建表值函數(不是內聯函數),我會看到相同的性能改進。例如
SELECT <Fields>
FROM <Multiple Tables Joined>
LEFT JOIN dbo.MySubQueryFunction() ON <Condition>
有人有任何想法,爲什麼優化器在這種情況下是如此愚蠢?
您使用的是哪個版本的SQL Server? – Austin 2009-02-06 22:05:44
我在2005年和2008年都遇到過這個問題 – 2009-02-06 23:07:18