2012-08-29 76 views
-1

我正在處理顯示組件的JSF頁面。我想問您如何優化此SQL查詢。我在家,我沒有訪問Oracle服務器來測試查詢:如何優化此SQL查詢

SqlStatementSmall = "SELECT a.* FROM (SELECT b.*, rownum rn " 
    + " FROM (select y.name, y.serialnumber, y.location, y.type, y.powerwatt," 
    + " y.dateadded, y.datedeployed, y.weightkg, y.uform, y.zonecage" 
    + " FROM component x, componentstats y where x.componentstatsid = y.componentstatsid" 
    + " and y.componenttypeid = 1122 ORDER BY %s %s) b" 
    + " WHERE rownum <= ?) a" 
    + " WHERE rn > ?"; 

謝謝你的幫忙!

+4

是的,你可以。 http://sqlfiddle.com/#!4 :) –

+0

我將ORDER BY添加到SQL查詢 - 是否正確地使用它? – user1285928

+0

@ user1285928。 。 。沒有ORDER BY只屬於最外層查詢的末尾(除非您使用的是分析函數)。它應該在最後的WHERE子句之後。 –

回答

1

你好,

 select y.name, y.serialnumber, y.location, y.type, y.powerwatt,y.dateadded, y.datedeployed, y.weightkg, y.uform, y.zonecage, rownum rn 
     from component x 
     inner join componentstats y on x.componentstatsid = y.componentstatsid 
     where y.componenttypeid = 1122 
     and rownum <= ? 
     and rownum > ? 
     ORDER BY %s %s 

更新 注意:這是行不通的,請參閱@Justin洞意見,感謝

+1

這不起作用。首先,在'ORDER BY'之前應用'ROWNUM'。所以,最好的情況是,這將獲取一個任意的「N」行並對它們進行排序。它不會按順序獲取任意的「N」行。也不保證結果集是穩定的。此外,如果第二個'rownum>?'謂詞的綁定變量是0以外的任何值,查詢將根本不返回任何數據。謂詞'rownum> 1'永遠不會返回一行。 –

+0

@Justin Cave你能否寫下你的最終建議。 – user1285928

+0

@ user1285928 - 您發佈的查詢看起來很合理,沒有上下文。我發佈了許多問題,我需要回答這些問題以獲取上下文,以確定是否有更好的方式獲得您感興趣的結果和/或是否有改進性能的方法。沒有這些問題的答案,我無法提供很多幫助。 –

1

它總是使我感到驚訝,當人們試圖做的查詢性能調整,而不執行計劃和任何統計數據。你應該做的第一件事是獲得一個執行計劃。