没有列的插入语句是否批准Oracle中的性能

时间:2018-08-08 06:18:51

标签: oracle oracle12c database-performance insert-into

我正在使用Oracle 12。 定义insert statement时,可以选择不声明列列表

  

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

Ask TOM中还介绍了批量最佳性能解决方案:

 insert into insert_into_table values ( data(i) ); 

我的问题是,不是说列的性能确实比陈述中的列更好或至少等于

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

2 个答案:

答案 0 :(得分:2)

最佳实践是,您始终在insert语句中定义列,而不是出于性能考虑(没有区别),而是出于以下情况:

  • 您创建带有列col1,col2的表test1;
  • 您在过程/ etc的该表中插入数据,而无需命名列;
  • 您添加新列col3,col4;
  • 当前逻辑将因插入而失败,将引发错误。

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

答案 1 :(得分:2)

根据我的经验,省略列名是没有好处的-这样做也是不好的做法,因为如果列顺序发生了变化(为了清楚起见,有时人们会这样做,但实际上并不需要这样做)及其定义允许插入数据,您将在错误的列中获得错误的数据。

根据经验,这样做是不值得的。始终指定要输入值的列列表。数据库必须仍然进行检查。

相关:SQL INSERT performance omitting field names?