2011-10-12 21 views
9

我有一個可笑的海量查詢生成的業務對象網絡智能針對預算系統的SQL服務器數據庫。報告開發人員在GUI中創建了此查詢,並發現它從未完成。我讓它在昨晚運行,並且在我們的服務器重新啓動Windows更新之前運行了7個小時。如何找到'沒有連接謂詞'的來源

我看了一下sql中的解釋計劃,發現了幾個'嵌套循環(Inner Join)步驟中的一些警告 - 這些警告中的兩個收取了第三步到最後一步的費用。警告是'沒有連接謂詞'。

其他筆記我對這個是查詢包含這在where子句中:

BF_FUND.CD IN ('0105','0101') 

如果你只是擺在那裏的一個基金代碼,它運行良好 - 這樣莫名其妙地加上第二碼讓東西變成笛卡爾(也許,這是沒有連接謂詞會發生的事情)。

關於如何跟蹤這個問題的任何建議? 790行精彩的SQL通過了,加入後沒有任何東西可以加入。

解釋計劃能否指向特定區域?

感謝您的幫助。


編輯:

不能發佈查詢,安全的事情,這是很多大型混淆。我不想讓任何人看到它。

+1

1 - **郵政查詢** – JNK

+5

2 - 確保您使用顯式'JOIN'語法('LEFT JOIN在XY = zy' X),而不是隱含synax('從X, z') – JNK

+1

執行計劃會告訴你有關表格,所以難以找出答案。它是用隱式'JOIN'語法編寫的嗎? –

回答

4

使用在線SQL格式化程序來獲得您的SQL連接的清晰度;然後按塊分割您的查詢塊以調試問題。

http://www.dpriver.com/pp/sqlformat.htm

然後你可以使用在MSSQL服務器計劃的圖形視圖;這將解釋一切。

P.S:如果由於嵌套循環連接而導致查詢表現不佳,並且沒有連接謂詞,那麼在查詢中缺少連接標準的情況並非如此。 檢查http://sqlserverselect.blogspot.com/2010/10/nested-loops-join-no-join-predicate.html

+1

感謝您的第二個鏈接 - 這可能是發生了什麼事情。 – Sam