2011-01-25 11 views
2

主要更新:專用查詢運行正常,直接或者任何改變它製作,但在目前的狀態需要更長的時間後調試的幾天運行

我舉辦過類似的幾個疑問:

SELECT RTRIM(part) as part 
FROM tableP pm 
LEFT join tableS s on pm.id = s.id 
INNER JOIN tableC cm ON cm.id = pm.id 
WHERE name = 'NGW' AND status NOT IN ('NL', 'Z') 
GROUP BY RTRIM(part), isnull(s.value,0) 
ORDER BY isnull(s.value,0) 

它在Java中運行,像這樣:

PreparedStatement select = con.prepareStatement(
     "SELECT RTRIM(part) as part" + 
     "FROM tableP pm " + 
     "LEFT JOIN tableS s ON pm.id= s.id " + 
     "INNER JOIN tableC cm ON cm.id= pm.id " + 
     "WHERE name =? AND status NOT IN ('NL', 'Z') " + 
     "GROUP BY RTRIM(part), isnull(s.value,0) " + 
     "ORDER BY isnull(s.value,0) "); 
    select.setString(1, name); 
    ResultSet rs = select.executeQuery(); 
    while(rs.next()){ 
      ... Data is Loaded... 

的查詢已經在Java應用程序內部運行的罰款。突然之間,這種形式的3或4個查詢從一秒鐘以內減少到一分鐘以上。

我已經從SQL事件探查器複製了確切的查詢,當它直接在數據庫上運行時,它會在不到一秒的時間內執行。我開始對查詢進行更改,發現查詢的任何更改都會將其返回到1秒的性能,即使在語句之間添加單個空間。但只要我將它恢復到原來的確切狀態,就需要60多秒。

核心問題: 所以,我有一個解決方法,但什麼可能導致查詢即使只有一個變化小的空白不同運行?

+0

請給出一個更精確的查詢,帶過濾器,帶參數。從Java和MSSQL EM。 – gbn 2011-01-25 19:19:08

+0

@gbn,更新後的問題包含確切的查詢(更改名稱以保護無辜)以及調用它的Java代碼。 – jzd 2011-01-25 20:07:09

回答

相關問題