我有 20 年的 SQL 经验,但不是专门使用 Oracle 的。一位“Oracle 专家”向我保证,构建一个没有参数的 SQL 查询(像这样):
SELECT t.ID, t.Name, t.Address ... FROM Table1 t WHERE t.ID = 'someID' AND t.Name = 'someName'...
至少和使用参数一样快(像这样)
SELECT t.ID, t.Name, t.Address ... FROM Table1 t WHERE t.ID = ? AND t.Name = ?
代码在循环中执行。
在我使用过的大多数其他数据库中,使用参数可以提高速度。它允许数据库缓存与 SQL 语句匹配的编译计划。由于 SQL 不会在每次调用时更改(尽管参数会更改),因此可以提高性能。数据库简单地绑定参数并继续。
“甲骨文专家”表示这没有必要。但显然,Oracle 需要“解析”参数,将剩余的字符串与缓存的执行计划相匹配,然后重新绑定参数,就好像它们最初是作为参数传递的一样。
我在这里有正确的心理图景吗?Oracle 是否有一些“神奇”之处,它真的不会影响我们如何处理参数传递/SQL 构建策略?
是否有关于 Java / JDBC / Oracle 瘦驱动程序的想法我不知道我应该在这里知道?
我希望加强我的理解或扩展我的知识。
(除了安全问题,我知道构建 SQL 字符串允许 SQL 注入攻击,我正在寻找更直接的弹药来反对专家的意见 - 如果它存在的话)。
其他详情:Oracle 11gR2, Java 1.6