问题描述
嗨,汤姆,
我们有一个将数据加载到数据库中的应用程序,它使用插入语句将数据插入到表中。
每个表包含近220列。
在表1中插入值(1, 2, 3, 6, 7, 8, 220) ;
在表1中插入值(1, 2, 3, 5, 7, 8, 220) ;
在表1中插入值(1, 2, 5, 7, 8, 200) ;
在表1中插入值(1, 2, 4, 5, 7, 8, 200) ;
在表1中插入值(1, 2, 4, 6, 7, 9...200) ;
根据应用程序逻辑,应用程序尝试将每个记录以不同的格式插入表1 (请注意,在每次插入时都未插入某些列值)
我观察到Oracle生成不同的SQL_ID ,因为列中的更改...它直接影响插入性能。
你能给我指点一下如何解决这个问题吗?
感谢与问候
克里希纳。
我们有一个将数据加载到数据库中的应用程序,它使用插入语句将数据插入到表中。
每个表包含近220列。
在表1中插入值(1, 2, 3, 6, 7, 8, 220) ;
在表1中插入值(1, 2, 3, 5, 7, 8, 220) ;
在表1中插入值(1, 2, 5, 7, 8, 200) ;
在表1中插入值(1, 2, 4, 5, 7, 8, 200) ;
在表1中插入值(1, 2, 4, 6, 7, 9...200) ;
根据应用程序逻辑,应用程序尝试将每个记录以不同的格式插入表1 (请注意,在每次插入时都未插入某些列值)
我观察到Oracle生成不同的SQL_ID ,因为列中的更改...它直接影响插入性能。
你能给我指点一下如何解决这个问题吗?
感谢与问候
克里希纳。
专家解答
每个唯一的语句将获得其自己的SQL_ID。因此,如果希望避免语句堆栈,则需要设置所有列的单个插入。如果列没有值,请将其设置为null。
最简单的方法就是使用绑定变量!例如:
在运行插入之前设置绑定变量值。
看起来你现在用的不是这些。因此,您需要更改应用程序才能执行此操作。
缺少绑定变量可能是性能问题的真正原因。因此, SQL_ID/列的组合不是一个,every插入是一个新语句!这将导致大量的分析...
更糟的是,您也面临SQL注入的风险:
https://blogs.oracle.com/sql/entry/what_is_sql_injection_and
最简单的方法就是使用绑定变量!例如:
insert into t (c1, c2, c3, c4, ..., c219, c220) values (:b1, :b2, :b3, :b4, ...,:b219, :b220);
在运行插入之前设置绑定变量值。
看起来你现在用的不是这些。因此,您需要更改应用程序才能执行此操作。
缺少绑定变量可能是性能问题的真正原因。因此, SQL_ID/列的组合不是一个,every插入是一个新语句!这将导致大量的分析...
更糟的是,您也面临SQL注入的风险:
https://blogs.oracle.com/sql/entry/what_is_sql_injection_and
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




