【发布时间】:2018-01-15 11:37:21
【问题描述】:
当使用 JDBC 的 PreparedStatements 查询 Oracle 时,请考虑:
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: 与使用 rownum 常量的 qry2 相比,使用 qry1(其中 rownum 值是参数化的)是否有任何 Oracle 服务器性能优势(查询编译、缓存等)值是硬编码的?
问题 2: 忽略非性能方面的考虑(如 SQL 注入、可读性等),Oracle 服务器是否有任何性能优势(查询编译、缓存、等)使用 qry2 而不是 qry3(其中 col2 的值被显式附加,未参数化)。
【问题讨论】:
标签: java oracle jdbc prepared-statement spring-jdbc