没有列的插入语句是否在 Oracle 中批准性能
Is insert statement without column approve performance in Oracle
我正在使用 Oracle 12。
当您定义 insert statement 时,可以选择不声明列列表
If you omit the column list altogether, then the values_clause or query must specify values for all columns in the table.
Ask TOM 中还描述了建议批量处理的最佳性能解决方案:
insert into insert_into_table values ( data(i) );
我的问题是,与在语句中声明列
相比,声明列确实产生了更好或至少相等的性能
insert table A (col1, col2, col3) values (?, ?, ?);
最佳做法是,您始终在插入语句中定义列,而不是为了性能(没有区别),但对于这样的情况:
- 您使用列 col1、col2 创建 table test1;
- 您在 procedures/etc 中插入数据 table,但未命名列;
- 您添加了新列 col3、col4;
- 当前逻辑将因插入而失败,将引发错误。
因此,为避免失败,请始终命名列,这样当您修改 table 结构时,您的代码就不会中断。
根据我的经验,省略列名没有任何好处 - 这样做也是一种不好的做法,因为如果列顺序发生变化(有时人们会这样做,为了清楚起见,但他们确实不需要这样做)并且他们的定义允许插入数据,你会在错误的列中得到错误的数据。
根据经验,这是不值得的。始终指定要将值放入的列列表。无论如何,数据库都必须检查。
相关:SQL INSERT performance omitting field names?
我正在使用 Oracle 12。 当您定义 insert statement 时,可以选择不声明列列表
If you omit the column list altogether, then the values_clause or query must specify values for all columns in the table.
Ask TOM 中还描述了建议批量处理的最佳性能解决方案:
insert into insert_into_table values ( data(i) );
我的问题是,与在语句中声明列
相比,声明列确实产生了更好或至少相等的性能insert table A (col1, col2, col3) values (?, ?, ?);
最佳做法是,您始终在插入语句中定义列,而不是为了性能(没有区别),但对于这样的情况:
- 您使用列 col1、col2 创建 table test1;
- 您在 procedures/etc 中插入数据 table,但未命名列;
- 您添加了新列 col3、col4;
- 当前逻辑将因插入而失败,将引发错误。
因此,为避免失败,请始终命名列,这样当您修改 table 结构时,您的代码就不会中断。
根据我的经验,省略列名没有任何好处 - 这样做也是一种不好的做法,因为如果列顺序发生变化(有时人们会这样做,为了清楚起见,但他们确实不需要这样做)并且他们的定义允许插入数据,你会在错误的列中得到错误的数据。
根据经验,这是不值得的。始终指定要将值放入的列列表。无论如何,数据库都必须检查。
相关:SQL INSERT performance omitting field names?