SQL執行計畫Join運算子顯示 [無聯結述詞]。 Sql Server No Join Predicate Warning

今天無意間發現一句簡單Query的執行計畫有一個我沒見過的圖示

下圖是一個巢狀迴圈的運算子

而我今天看見一個巢狀迴圈的運算子,但上面多了一個叉叉,如下圖

 

產生這一個圖示的Query是很單純的兩張表Join,並Where一個ID如此而已。

整個Query的執行計畫如下圖。

 

該運算子的內容如下圖,其中紅色圈選處的警告說明顯示是 [ 無聯結述詞 ]

 

我測試一下發現這兩張表只要Join(Left Join也是)其執行計畫就會顯示叉叉

,可是其Query出來的資料又沒問題。此時我將狀況跟百敬老師說,本想問

一下有叉叉代表甚麼意思。

結果百敬老師還幫我爬文找資料(真的感謝老師Orz)。後來老師找到一篇文,

狀況跟我類似,連結如下

 

該文章作者也表示爬了很多文,大多建議的解法有重建索引或更新統計資料。

因此我姑且一試,將兩張資料表的Index給重新建立了。然後我們再執行

一次Query看看。

如下圖所示,該警告的叉叉消失了。

 雖然不曉得是甚麼原因會產生該問題,也不曉得甚麼原因解了這一個問題

百敬老師覺得,跟形成執行計畫的任何一環有關,都可能可以改變這個警告或錯誤 ,再次感謝老師,自己筆記一下,免得將來又忘了呀。 
我遇見的是一種特殊狀況,然而會出現該錯誤一定是資料庫引擎依據判斷產出的結果,下面連結是Rico對於No Join Predicate的研究好文

我是ROCK

rockchang@mails.fju.edu.tw