CREATE TABLE TEST_A AS SELECT * FROM TEST_B

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 查看数据库模式:   SQL> connect /as sysdba Connected. SQL> select name,log_mode from v$database;   N...

查看数据库模式:

 

SQL> connect /as sysdba

Connected.

SQL> select name,log_mode from v$database;

 

NAME               LOG_MODE

------------------ ------------------------

ORCL10G            NOARCHIVELOG

可知:非归档模式

 

确认表的大小

SQL> connect sjzyk/sjzyk

Connected.

SQL> select t.segment_name,t.BYTES/1024/1024||'mb' from user_segments t ;

 

SEGMENT_NAME

--------------------------------------------------------------------------------

T.BYTES/1024/1024||'MB'

--------------------------------------------------------------------------------

SJ_TEST1

256mb

 

SQL> set autotrace traceonly statistics;

SQL> insert into sj_test2 as select * from sj_test1;

insert into sj_test2 as select * from sj_test1

                     *

ERROR at line 1:

ORA-00926: missing VALUES keyword

 

 

SQL> insert into sj_test2 select * from sj_test1;

 

1000000 rows created.

 

 

Statistics

----------------------------------------------------------

       5291  recursive calls

     283525  db block gets

     119170  consistent gets

      32033  physical reads

  262035336  redo size

        665  bytes sent via SQL*Net to client

        579  bytes received via SQL*Net from client

          4  SQL*Net roundtrips to/from client

          7  sorts (memory)

          0  sorts (disk)

    1000000  rows processed

 

从上面记录中,insert普通语句产生redo大小约为260M左右

 

SQL> set autotrace traceonly statistics;

SQL> insert /*+ APPEND */ into sj_test2 select * from sj_test1;

 

1000000 rows created.

 

 

Statistics

----------------------------------------------------------

       5093  recursive calls

      36678  db block gets

      34225  consistent gets

      31611  physical reads

     371512  redo size

        663  bytes sent via SQL*Net to client

        593  bytes received via SQL*Net from client

          4  SQL*Net roundtrips to/from client

          2  sorts (memory)

          0  sorts (disk)

    1000000  rows processed

 

SQL> commit;

 

添加/*+ APPEND */直插后redo产生日志大约为300kb

SQL> set autotrace traceonly statistics;                                 

SQL> insert /*+ APPEND */ into sj_test2 nologging select * from sj_test1;

 

1000000 rows created.

 

 

Statistics

----------------------------------------------------------

       5222  recursive calls

      36678  db block gets

      34238  consistent gets

      20265  physical reads

     372068  redo size

        663  bytes sent via SQL*Net to client

        606  bytes received via SQL*Net from client

          4  SQL*Net roundtrips to/from client

          6  sorts (memory)

          0  sorts (disk)

    1000000  rows processed

 

采用/*+ APPEND */nologging的日志与直插区别不是很大,

SQL> set autotrace traceonly statistics; 

SQL> insert  into sj_test2 nologging select * from sj_test1;

 

1000000 rows created.

 

 

Statistics

----------------------------------------------------------

       5098  recursive calls

     283651  db block gets

      85806  consistent gets

      20922  physical reads

  260028080  redo size

        680  bytes sent via SQL*Net to client

        590  bytes received via SQL*Net from client

          4  SQL*Net roundtrips to/from client

          2  sorts (memory)

          0  sorts (disk)

    1000000  rows processed

采用nologging模式下redo日志差不多也是260m,至少在非归档模式下,nologging的左右不是很大

 

在SYS用户下创建视图和公共映射

create or replace view redo_size as

  select value

   from v$mystat, v$statname

    where v$mystat.statistic# = v$statname.statistic#

  and v$statname.name = 'redo size';

CREATE PUBLIC synonym REDO_SIZE FOR REDO_SIZE;

 

SQL> select * from redo_size;

 

     VALUE

----------

   3154424

 

SQL> create table sj_test2 as select * from sj_test1;

 

Table created.

 

SQL> select * from redo_size;

 

     VALUE

----------

   3568676

对比CREATE TABLE 创建前后值减去之前的redo500kb左右

 

 

初步测试:create table 语句对于抽取历史数据(大批量数据)产生的redo日志较少,插入数据较快。网上百度说是CREATE TABLE 为数据定义语言,产生少量的redo,undo

应用资料:http://www.2cto.com/database/201303/193306.html

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
5月前
|
存储 关系型数据库 数据管理
在 Postgres 中使用 Create Table
【8月更文挑战第11天】
578 0
在 Postgres 中使用 Create Table
|
5月前
|
SQL 关系型数据库 数据管理
在 Postgres 中使用 Delete Join
【8月更文挑战第11天】
257 0
在 Postgres 中使用 Delete Join
|
SQL 数据库
INSERT DESC UPDATE SELECT
INSERT DESC UPDATE SELECT
113 0
|
8月前
|
存储 SQL 关系型数据库
CREATE TABLE语句
在MySQL中,使用CREATE TABLE语句来创建表。你需要指定表名和列的定义,包括列名、数据类型以及约束等,结合实际存储和上一课学习的数据类型选取合适的。创建一个book_types表
239 0
|
数据库 OceanBase
使用 `INSERT INTO table_name SELECT * FROM table_name` 这种方式
使用 `INSERT INTO table_name SELECT * FROM table_name` 这种方式
86 1
|
数据库 OceanBase
INSERT INTO table_name SELECT * FROM table_name
INSERT INTO table_name SELECT * FROM table_name
87 1
|
SQL 数据库
CREATE TABLE 语句
CREATE TABLE 语句
136 1
|
SQL 数据库
CREATE TABLE
CREATE TABLE
165 0
|
SQL 关系型数据库 MySQL
Select for update使用详解
前言 近期开发与钱相关的项目,在高并发场景下对数据的准确行有很高的要求,用到了for update,故总结一波以便日后留恋。 for update的使用场景 如果遇到存在高并发并且对于数据的准确性很有要求的场景,是需要了解和使用for update的。 比如涉及到金钱、库存等。一般这些操作都是很长一串并且是开启事务的。如果库存刚开始读的时候是1,而立马另一个进程进行了update将库存更新为0了,而事务还没有结束,会将错的数据一直执行下去,就会有问题。所以需要for upate 进行数据加锁防止高并发时候数据出错。
2359 0
|
关系型数据库 MySQL 索引
浅谈create table as 和 insert into select 复制表遇到的问题
之前做一次表压缩测试,在准备原表时需要数据量比较大的表,通过insert into select 的方式将几个表的数据复制到一个表,产生的一些问题~
3275 0