当使用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的值显式为,附加,未参数化)。