簡體   English   中英

特定查詢可以直接運行良好,也可以進行任何更改,但在當前狀態下運行時間更長

[英]Specific Query runs fine directly or when any change to it is made but in current state takes longer to run

經過幾天調試后的主要更新:

我運行一些類似的查詢:

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 Profiler復制了確切的查詢,當直接在數據庫上運行時,它會在不到一秒鍾的時間內完成。 我開始對查詢進行更改,發現對查詢的任何更改都會使它返回1秒性能, 即使在語句之間添加單個空格也是如此。 但是,一旦我將其恢復為原始准確狀態,將需要60秒鍾以上的時間。

核心問題:因此,我有一個解決方法,但是即使是很小的更改,是什么導致查詢以不同的方式運行呢?

執行計划是否可能已損壞? 您可以嘗試明確清除計划緩存嗎? http://msdn.microsoft.com/en-us/library/aa175244(v=sql.80).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM