【发布时间】:2020-03-16 11:08:50
【问题描述】:
Oracle 管理员缠着我说,如果我使用绑定变量而不是内联变量,Oracle 可以优化更好的请求。代码是 C# 并使用 Devart Oracle 提供程序 Oracle12c+。我知道如果您运行选择 - 缓存的统计信息和下一个类似的命令会更好。但是单行插入/更新?我不相信。
任何人都可以给出明智的答案吗?
例子:
update x set a = 0 where id = 100
vs
update x set a = :a where id = :id
编辑:未绑定的值只是数字,因此 SQL 注入超出了问题的范围
【问题讨论】:
-
我很想从这篇文章中删除 c# 标记,看到问题的核心是关于 Oracle 的 - 生成和发送查询的语言无关紧要。想法?
-
是的。您可以避免 SQL 注入攻击。这不仅仅是优化。优化好处与必须将查询编译到执行计划中的次数有关。有多少行受到影响或返回并不重要。如果您执行相同的更新 1000 次,避免 1000 次重新编译将大大提高性能。如果更新和您想象的一样便宜,编译将成为总成本的重要组成部分
-
简而言之,Oracle 管理员是对的。你应该听他的,而不仅仅是这个查询。
标签: c# .net oracle oracle12c devart