當使用JDBC的預處理語句查詢甲骨文,考慮一下:參數化常量在PreparedStatement的查詢的性能後果
String qry1 = "SELECT col1 FROM table1 WHERE rownum=? AND col2=?";
String qry2 = "SELECT col1 FROM table1 WHERE rownum=1 AND col2=?";
String qry3 = "SELECT col1 FROM table1 WHERE rownum=1 AND col2=" + someVariable ;
邏輯決定了ROWNUM的值始終是一個常數(1在這個例子中)。雖然col2的值是一個變化的變量。
問題1:是否有任何Oracle服務器的性能優勢(編譯查詢,緩存等)使用qry1其中ROWNUM值參數,在qry2這裏的rownum的恆定值是硬編碼?
問題2:忽略非性能考慮(如SQL注入,可讀性,等),是否有任何Oracle服務器性能優勢(查詢編譯,高速緩存等),以使用過qry2 qry3(其中col2的值顯式爲,附加,未參數化)。