【问题标题】:Is insert statement without column approve performance in Oracle是没有列的插入语句在 Oracle 中批准性能
【发布时间】:2019-01-15 07:27:35
【问题描述】:

我使用的是 Oracle 12。 当您定义insert statement 时,可以选择不声明列列表

如果您完全省略列列表,则 values_clause 或查询必须为表中的所有列指定值。

Ask TOM 在建议散装的最佳性能解决方案时也进行了描述:

 insert into insert_into_table values ( data(i) ); 

我的问题是,并不是说列确实比在语句中声明列产生更好或至少相同的性能

insert table A (col1, col2, col3) values (?, ?, ?);

【问题讨论】:

  • 区别不是“列列表”而是bulk和/或绑定变量,即?
  • @WernfriedDomscheit 是的,但它仍然提供了没有列列表而不是声明的选项
  • @KamilG。但可能的重复不是询问(和回答)关于 Oracle 的问题

标签: oracle oracle12c database-performance insert-into


【解决方案1】:

最佳实践是,您总是在插入语句中定义列,不是为了性能(没有区别),而是为了这样的情况:

  • 您使用列 col1、col2 创建表 test1;
  • 您在程序/等中的该表中插入数据,而不命名列;
  • 您添加新列,col3,col4;
  • 当前逻辑将因插入而失败,将引发错误。

因此,为避免失败,请始终命名列,这样您的代码就不会在修改表结构时停止。

【讨论】:

  • 通过引用,您的意思是文档中的实际链接?附言你不相信我们共同的来之不易的经验吗?开玩笑..这可以作为“那些”问题之一进行讨论 - “更好地使用 OR 运算符或 IN。谁表现得更好?”
  • 我认为你是对的,但我想知道具体是性能影响
【解决方案2】:

根据我的经验,省略列名并没有什么好处 - 这样做也是一种不好的做法,因为如果列顺序发生变化(有时人们会这样做,为了清楚起见,但他们真的不需要)和他们的定义允许插入数据,你会在错误的列中得到错误的数据。

根据经验,这不值得麻烦。始终指定要放入值的列列表。无论如何,数据库必须检查。

相关:SQL INSERT performance omitting field names?

【讨论】:

  • 问题/答案是关于MySQL and PostgreSQL
  • 我真的无法想象 Oracle 会以另一种方式工作。列有它们的约束和修饰符:外键,不为空,......我不明白数据库应该如何知道这一切而不明确检查。此外,文档没有提到这一点。这里也没有任何内容:dba-oracle.com/t_insert_tuning.htm
猜你喜欢
  • 2015-10-11
  • 2012-07-08
  • 2012-04-02
  • 2015-10-12
  • 1970-01-01
  • 2016-03-05
  • 2016-04-10
  • 1970-01-01
相关资源
最近更新 更多