在数据库中移动数据最快的方法是将其从一个表移动到别一个表,而不是需要进入操作系统将数据从一个表移动到别一个表,有一些常见的方法可用于提高数据迁移的性能:
1. 调整表的结构(删除索引和触发器)
2. 在数据迁移期间禁用约束
3. 使用提示和选项来改进事务性能
第一个技巧是调整表的结构,它涉及禁用目标表上面的任何触发器或索引。例如,如果在目标表上有行级触发器,则插入到表中的每一行都会执行触发器。如果可能的话,最好在数据插入之前将目标表的触发器禁用;如果应该为每个插入的行执行该触发器,则可以在批量插入完成以后再创建此触发器,而不应该在批量插入期间每插入一条数据重复执行触发器。
除了禁用触发器,应该在启动数据加载之前删除目标表上面的索引,然后在数据加载完毕后再重新创建索引。如果索引留在表上,ORACLE将在插入每一行时动态管理索引。
注意:删除索引和禁用触发器可以解决大多数数和大型表与表之间数据迁移中遇到的性能问题。
除了禁用索引,还要考虑到表上的约束。如果源数据已经在数据库的表中,在将数据加载到目标表之前,可以检查该数据了解它的相关约束(例如外键或check约束),一旦加载数据完成就可以重新启用这些约束。
如果以上选项无法提供适当的性能,就应该调查Oracle为数据迁移调整引入的选项。这些选项包括如下:
1.插入命令的APPPEND提示 类似于Direct Path Loader,APPENED提示将数据块加载到表中,从表的高水位线开始。使用APPENED提示可以增加空间利用率。
2.Nologging选项 如果正在执行create table as select 命令,使用nologing选项可避免在操作期间写入重做日志文件。
3.并行选项 并行查询使用多个进程来完成一个任务。对于create table as select命令,可并行化create table 部分和查询部分。如果使用并行选项,则也应该使用nologing选项,否则并行操作将不得不由于串行化写入到联机重做日志文件而等待。
在使用这些高级选项之前,应该首先调查目标表的结构,确保已经避免前面提到的一些常见问题。
注意:CTAS只能复制表结构和表数据,对于表索引,字段和表注释,字段默认值等都无法复制。如需要应在数据导入后进行设置。同时导入的目标数据库表必须不存在。
相关推荐
本文将详细讲解两种MySQL表复制的方法:`CREATE TABLE LIKE` 和 `CREATE TABLE AS SELECT`。 1. **CREATE TABLE LIKE** `CREATE TABLE LIKE` 命令用于创建一个新表,该表具有与现有表相同的结构,包括字段、字段...
代码如下:create table t2 as select * from t1 where 1=2;或者 代码如下:limit 0; as创建出来的t2表(新表)缺少t1表(源表)的索引信息,只有表结构相同,没有索引。 代码如下:create table t2 like t1 ; like ...
使用`CREATE TABLE AS SELECT`语句可以创建已有表的一个副本: ```sql CREATE TABLE new_table AS SELECT * FROM old_table; ``` 7. **创建视图(View)** 虽然不是实际的表,但视图允许你创建一个虚拟表,...
本篇文章将深入探讨两种复制表的方法:`CREATE TABLE LIKE`和`CREATE TABLE AS SELECT`,并分析它们的特点、用途及差异。 首先,`CREATE TABLE LIKE`命令允许你精确地复制一个表的结构,包括所有字段、数据类型、...
`CREATE TABLE AS SELECT`(简称CTAS)语句是一种非常实用的逻辑备份手段,它可以通过执行一个SELECT查询并将结果保存到新的表中来实现数据的备份。这种方式简单且有效,非常适合用于备份特定条件下的数据子集。 **...
创建分区表通常涉及`CREATE TABLE AS SELECT`和`CREATE TABLE PARTITION OF`语句。 在"create-table-postgres-database.zip"文件中,很可能包含了一系列创建不同场景下表的示例,可能涵盖了基本类型、约束、索引、...
在SQL数据库中,"CREATE TABLE" 是用于创建新表格的命令,这在数据库设计和管理中至关重要。在数据库系统中,表是数据的主要容器,它由行和列组成,用于存储和组织各种类型的数据。"CREATE TABLE" 语句允许我们定义...
### 一、使用`CREATE TABLE AS SELECT`语句创建新表 **题目背景与分析** 题目提到的`CREATE TABLE new_sales(prod_id, cust_id, order_date DEFAULT SYSDATE) AS SELECT prod_id, cust_id, time_id FROM sales;`这...
示例代码也验证了这一点:`sh@TEST0924> CREATETABLE new_sales(prod_id, cust_id, order_date DEFAULT SYSDATE) AS SELECT prod_id, cust_id, time_id FROM sales;` 表明命令执行成功,因此默认值可以被指定。故A...
create table dept as select * from scott.dept; create table emp as select * from scott.emp; 业务场景:求各部门的工资总和及其所有部门的工资总和 这里可以用union来做,先按部门统计工资之和,然后在统计...
CREATE VIEW v1 AS SELECT coll FROMtabl WHERE coll > 25 ; CREATE VIEW V2 AS SELECT COI1 FROM v1 WITH CASCADED CHECK OPTION CREATE VIEW v3 AS SELECT coll FROM v2 WHERE coll ; Which statement will fail? ...
- `CREATE VIEW`:创建视图,允许查询结果以虚拟表的形式存在,如`CREATE VIEW viewname AS SELECT statement`。 - `DROP VIEW`:删除视图,例如`DROP VIEW viewname`。 5. **高级查询**: - `UNION`:合并两个...
根据提供的信息,我们可以深入探讨与Oracle数据库相关的几个关键知识点,特别是关于如何使用`CREATE TABLE ... AS SELECT`语句以及在创建新表时如何处理约束、默认值等。 ### Oracle数据库中的`CREATE TABLE ... AS...
sql> create global temporary table xay_temp as select * from xay on commit preserve rows / on commit delete rows; ``` **解析**: - `create global temporary table`: 创建全局临时表。 - `on commit ...
Oracle中的select into Oracle中没有select into的用法! 在某些数据库中有select into的用法,用法是: select valueA,valueB into tableB from tableA;...create table tableB as select valueA,valueB from tableA;
` 或 `CREATE TABLE tab_new AS SELECT col1, col2 FROM tab_old DEFINITION ONLY;` - **说明**: 第一种方式可以直接定义表结构,第二种方式是从已有表复制结构。 - **示例**: - 创建表: `CREATE TABLE employees ...
AS语句:CREATE TABLE tab_new AS SELECT col1,col2… FROM tab_old DEFINITION ONLY 这将将tab_old表的字段结构复制到tab_new表中,但不会复制索引。 五、删除表 删除表的基本语句为:DROP TABLE tabname 例如...
如果你的数据库不支持`CREATE TABLE AS SELECT`语法,可以先创建一个空表,然后手动定义每个字段: ```sql CREATE TABLE 新表名 ( column1 数据类型, column2 数据类型, ... ); ``` 2. **复制数据**(如果...