暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 插入性能问题

askTom 2016-10-17
146

问题描述

嗨,汤姆,


我们有一个将数据加载到数据库中的应用程序,它使用插入语句将数据插入到表中。

每个表包含近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。

最简单的方法就是使用绑定变量!例如:

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论