zoukankan      html  css  js  c++  java
  • Oracle学习笔记(九)

    全局临时表自动处理数据:

    drop table ljb_tmp_session;
    create global temporary table ljb_tmp_session on commit preserve rows as select  * from dba_objects where 1=2;
    select table_name,temporary,duration from user_tables  where table_name='LJB_TMP_SESSION';
    drop table  ljb_tmp_transaction;
    create global temporary table ljb_tmp_transaction on commit delete rows as select * from dba_objects where 1=2;
    select table_name, temporary, DURATION from user_tables  where table_name='LJB_TMP_TRANSACTION';
    
    insert all 
       into  ljb_tmp_transaction
       into  ljb_tmp_session
    select * from dba_objects;
    
    select session_cnt,transaction_cnt from (select count(*) session_cnt from ljb_tmp_session),
     (select count(*) transaction_cnt from ljb_tmp_transaction);
    
    commit;
     
    select session_cnt,transaction_cnt from (select count(*) session_cnt from ljb_tmp_session),
    (select count(*) transaction_cnt from ljb_tmp_transaction);
    
    
    select session_cnt,transaction_cnt from (select count(*) session_cnt from ljb_tmp_session),
    (select count(*) transaction_cnt from ljb_tmp_transaction);
    

      不同session数据独立:

    drop table ljb_tmp_session;
    create global temporary table ljb_tmp_session on commit preserve rows as select  * from dba_objects where 1=2;
    select table_name,temporary,duration from user_tables  where table_name='LJB_TMP_SESSION';
    drop table  ljb_tmp_transaction;
    create global temporary table ljb_tmp_transaction on commit delete rows as select * from dba_objects where 1=2;
    select table_name, temporary, DURATION from user_tables  where table_name='LJB_TMP_TRANSACTION';
    
    --不同session的例子试验基于sesssion 的临时表即可了,不用试验另外一个了。
    ---连上session 1
     insert into ljb_tmp_session select * from dba_objects where rownum<=10;
     --可以体会提交,基于session 的提交并清理数据
     commit;
     select count(*) from ljb_tmp_session;
    
    
      COUNT(*)
    ----------
        10 
     
    ---不退出session 1,继续登录session 2
    insert into ljb_tmp_session select * from dba_objects where rownum<=20;
    commit;
    select count(*) from ljb_tmp_session;
    
      COUNT(*)
    ----------
        20
    

      产生日志较少:

    全局临时表是否在同样delete ,insert 和update 的情况下,产生的redo比普通表要少的多。
    
    sqlplus "/ as sysdba"
    grant all on v_$mystat to ljb;
    grant all on v_$statname to ljb;
    connect  ljb/ljb
    drop table t purge;
    create table t as select * from dba_objects ;
    --以下创建视图,方便后续直接用select * from v_redo_size进行查询
    create or replace view v_redo_size as
        select a.name,b.value
        from v$statname a,v$mystat b
        where a.statistic#=b.statistic#
        and a.name='redo size';
        
        
    select * from v_redo_size;
    
    --中间输入你的删除插入更新的动作
    
    select * from v_redo_size;    
    
    两次相减就是产生的redo量
    

      索引组织表:

    --必须有主键!
    ---分别建索引组织表和普通表进行试验
    set autotrace off
    drop table heap_addresses purge;
    drop table iot_addresses purge;
    create table heap_addresses
       (empno    number(10),
        addr_type varchar2(10),
        street    varchar2(10),
        city      varchar2(10),
        state     varchar2(2),
        zip       number,
        primary key (empno)
       )
    /
    
    create table iot_addresses
       (empno    number(10),
        addr_type varchar2(10),
        street    varchar2(10),
        city      varchar2(10),
        state     varchar2(2),
        zip       number,
       primary key (empno)
       )
       organization index
    /
    insert into heap_addresses
       select object_id,'WORK','123street','washington','DC',20123
       from all_objects;
    insert into iot_addresses
        select object_id,'WORK','123street','washington','DC',20123
        from all_objects;
    commit;
    
    ---分别比较索引组织表和普通表的查询性能
    set linesize 1000
    set autotrace traceonly
    select * from heap_addresses where empno=22;
    SQL> select * from heap_addresses where empno=22;
    
    执行计划
    ----------------------------------------------------------------------------------------------
    | Id  | Operation                   | Name           | Rows  | Bytes | Cost (%CPU)| Time     |
    ----------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT            |                |     1 |    50 |     1   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS BY INDEX ROWID| HEAP_ADDRESSES |     1 |    50 |     1   (0)| 00:00:01 |
    |*  2 |   INDEX UNIQUE SCAN         | SYS_C0013751   |     1 |       |     1   (0)| 00:00:01 |
    ----------------------------------------------------------------------------------------------
    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
              3  consistent gets
              0  physical reads
              0  redo size
            659  bytes sent via SQL*Net to client
            405  bytes received via SQL*Net from client
              1  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed
              
              
    select * from iot_addresses where empno=22;
    
    执行计划
    ----------------------------------------------------------------------------------------
    | Id  | Operation         | Name               | Rows  | Bytes | Cost (%CPU)| Time     |
    ----------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |                    |     1 |    50 |     1   (0)| 00:00:01 |
    |*  1 |  INDEX UNIQUE SCAN| SYS_IOT_TOP_104441 |     1 |    50 |     1   (0)| 00:00:01 |
    ----------------------------------------------------------------------------------------
    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
              2  consistent gets
              0  physical reads
              0  redo size
            751  bytes sent via SQL*Net to client
            416  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed
     
    

      簇表:

    --构造环境
    --注意这个删除的先后顺序,否则会报ORA-00951: 簇非空
    set autotrace off
    drop table cust_orders;
    drop cluster shc;
    
    CREATE CLUSTER shc
    (
       cust_id     NUMBER,
       order_dt    timestamp SORT
    )
    HASHKEYS 10000
    HASH IS cust_id
    SIZE  8192
    /
    CREATE TABLE cust_orders
    (  cust_id       number,
       order_dt      timestamp SORT,
       order_number  number,
       username      varchar2(30),
       ship_addr     number,
       bill_addr     number,
       invoice_num   number
    )
    CLUSTER shc ( cust_id, order_dt )
    /
    
    
    ---开始执行分析
    set autotrace traceonly 
    variable x number
    --以下是利用有序散列聚族表的方法,发现排序被避免
    select cust_id, order_dt, order_number
      from cust_orders
     where cust_id = :x
     order by order_dt;
     
    
    执行计划
    ----------------------------------------------------------------------
    | Id  | Operation         | Name        | Rows  | Bytes | Cost (%CPU)|
    ----------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |             |     1 |    39 |     0   (0)|
    |*  1 |  TABLE ACCESS HASH| CUST_ORDERS |     1 |    39 |            |
    ----------------------------------------------------------------------
    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
              0  consistent gets
              0  physical reads
              0  redo size
            416  bytes sent via SQL*Net to client
            404  bytes received via SQL*Net from client
              1  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              0  rows processed
     
    --以下是普通方法,排序不可避免
    select job, hiredate, empno
      from scott.emp
     where job = 'CLERK'
     order by hiredate;
    
    执行计划
    ---------------------------------------------------------------------------
    | Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    ---------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |      |     3 |    60 |     4  (25)| 00:00:01 |
    |   1 |  SORT ORDER BY     |      |     3 |    60 |     4  (25)| 00:00:01 |
    |*  2 |   TABLE ACCESS FULL| EMP  |     3 |    60 |     3   (0)| 00:00:01 |
    ---------------------------------------------------------------------------
    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
              7  consistent gets
              0  physical reads
              0  redo size
            640  bytes sent via SQL*Net to client
            415  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              1  sorts (memory)
              0  sorts (disk)
              4  rows processed
    

      外键索引性能:

    drop table t_p cascade constraints purge;
    drop table t_c cascade constraints purge;
    
    CREATE TABLE T_P (ID NUMBER, NAME VARCHAR2(30));
    ALTER TABLE T_P ADD CONSTRAINT  T_P_ID_PK  PRIMARY KEY (ID);
    CREATE TABLE T_C (ID NUMBER, FID NUMBER, NAME VARCHAR2(30));
    
    ALTER TABLE T_C ADD CONSTRAINT FK_T_C FOREIGN KEY (FID) REFERENCES T_P (ID);
    
    INSERT INTO T_P SELECT ROWNUM, TABLE_NAME FROM ALL_TABLES;
    INSERT INTO T_C SELECT ROWNUM, MOD(ROWNUM, 1000) + 1, OBJECT_NAME  FROM ALL_OBJECTS;
    COMMIT;
    
    ---外键未建索引前的表连接性能分析
    set autotrace traceonly
    set linesize 1000
    SELECT A.ID, A.NAME, B.NAME FROM T_P A, T_C B WHERE A.ID = B.FID AND A.ID = 880;
    
    执行计划
    ------------------------------------------------------------------------------------------
    | Id  | Operation                    | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
    ------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT             |           |    71 |  4260 |   137   (1)| 00:00:02 |
    |   1 |  NESTED LOOPS                |           |    71 |  4260 |   137   (1)| 00:00:02 |
    |   2 |   TABLE ACCESS BY INDEX ROWID| T_P       |     1 |    30 |     0   (0)| 00:00:01 |
    |*  3 |    INDEX UNIQUE SCAN         | T_P_ID_PK |     1 |       |     0   (0)| 00:00:01 |
    |*  4 |   TABLE ACCESS FULL          | T_C       |    71 |  2130 |   137   (1)| 00:00:02 |
    ------------------------------------------------------------------------------------------
    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
            452  consistent gets
              0  physical reads
              0  redo size
           3605  bytes sent via SQL*Net to client
            459  bytes received via SQL*Net from client
              6  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
             72  rows processed
             
             
    --外键建索引后的表连接性能分析
    CREATE INDEX IND_T_C_FID ON T_C (FID);
    SELECT A.ID, A.NAME, B.NAME FROM T_P A, T_C B WHERE A.ID = B.FID AND A.ID = 880;
    执行计划
    --------------------------------------------------------------------------------------------
    | Id  | Operation                    | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT             |             |    72 |  4320 |    69   (0)| 00:00:01 |
    |   1 |  NESTED LOOPS                |             |    72 |  4320 |    69   (0)| 00:00:01 |
    |   2 |   TABLE ACCESS BY INDEX ROWID| T_P         |     1 |    30 |     0   (0)| 00:00:01 |
    |*  3 |    INDEX UNIQUE SCAN         | T_P_ID_PK   |     1 |       |     0   (0)| 00:00:01 |
    |   4 |   TABLE ACCESS BY INDEX ROWID| T_C         |    72 |  2160 |    69   (0)| 00:00:01 |
    |*  5 |    INDEX RANGE SCAN          | IND_T_C_FID |    72 |       |     1   (0)| 00:00:01 |
    --------------------------------------------------------------------------------------------
    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
             83  consistent gets
              0  physical reads
              0  redo size
           3605  bytes sent via SQL*Net to client
            459  bytes received via SQL*Net from client
              6  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
             72  rows processed 
    

      外键与锁:

    --外键索引性能研究之准备
    drop table t_p cascade constraints purge;
    drop table t_c cascade constraints purge;
    
    CREATE TABLE T_P (ID NUMBER, NAME VARCHAR2(30));
    ALTER TABLE T_P ADD CONSTRAINT  T_P_ID_PK  PRIMARY KEY (ID);
    CREATE TABLE T_C (ID NUMBER, FID NUMBER, NAME VARCHAR2(30));
    
    ALTER TABLE T_C ADD CONSTRAINT FK_T_C FOREIGN KEY (FID) REFERENCES T_P (ID);
    
    INSERT INTO T_P SELECT ROWNUM, TABLE_NAME FROM ALL_TABLES;
    INSERT INTO T_C SELECT ROWNUM, MOD(ROWNUM, 1000) + 1, OBJECT_NAME  FROM ALL_OBJECTS;
    COMMIT;
    
    create index idx_IND_T_C_FID on T_C(FID);
    
    外键有索引,没有死锁情况产生
    --首先开启会话1
    select sid from v$mystat where rownum=1;
    DELETE T_C WHERE FID = 2;
    
    --接下来开启会话2,也就是开启一个新的连接
    select sid from v$mystat where rownum=1;
    DELETE T_P WHERE ID = 2000;
    
    外键索引先删除
    drop index  idx_IND_T_C_FID;
    
    
    外键索引删除后,立即有锁相关问题
    --首先开启会话1
    select sid from v$mystat where rownum=1;
    DELETE T_C WHERE ID = 2;
    --接下来开启会话2,也就是开启一个新的连接
    select sid from v$mystat where rownum=1;
     
    --然后执行如下进行观察
    DELETE T_P WHERE ID = 2000;
    --居然发现卡住半天不动了!
    

      普通索引改主键:

    drop table t_p cascade constraints purge;
    CREATE TABLE t_p
    (order_id NUMBER(3),
     item_id NUMBER(2),
     comments varchar2(400));
    CREATE INDEX ord_itm_idx ON t_p(order_id,item_id);
    
    alter table t_p add constraint ord_itm_id_pk primary key (order_id,item_id) using index ord_itm_idx ;
    
    ---不需要如此操作(差别只是索引名不一样而已)
    drop index ord_itm_idx;
    alter table t_p add constraint ord_itm_id_pk primary key (order_id,item_id); 
    主键DISABLE再ENABLE后,外键需要重新生效
    drop table t_p  cascade constraints purge; 
    create table t_p (dept_id number,emp_name varchar2(20),emp_id number);
    alter  table t_p add constraints pk_dept_id PRIMARY KEY  (dept_id);
    ALTER  TABLE t_p ADD CONSTRAINT FK_T_F FOREIGN KEY (emp_id) REFERENCES T_P (dept_id) ;
    select CONSTRAINT_TYPE,TABLE_NAME,STATUS from user_constraints t where t.constraint_name in ('PK_DEPT_ID','FK_T_F');
    ALTER TABLE t_p DISABLE CONSTRAINT pk_dept_id CASCADE;
    select CONSTRAINT_TYPE,TABLE_NAME,STATUS from user_constraints t where t.constraint_name in ('PK_DEPT_ID','FK_T_F');
    ALTER TABLE t_p ENABLE CONSTRAINT pk_dept_id ;
    select CONSTRAINT_TYPE,TABLE_NAME,STATUS from user_constraints t where t.constraint_name in ('PK_DEPT_ID','FK_T_F');
    alter table t_p enable constraint FK_T_F;
    select CONSTRAINT_TYPE,TABLE_NAME,STATUS from user_constraints t where t.constraint_name in ('PK_DEPT_ID','FK_T_F');
    

      主键约束有延迟约束到提交才验证的功能

    drop table test cascade constraints;
    create table test as select rownum object_id,object_name from dba_objects where rownum<=20;
    ALTER TABLE test ADD CONSTRAINT pk_object_id PRIMARY KEY(object_id) DEFERRABLE INITIALLY DEFERRED;
    INSERT INTO test VALUES (21,'ABC'); 
    INSERT INTO test VALUES (21,'EFG');
    COMMIT;
    SET CONSTRAINT pk_object_id IMMEDIATE;
    INSERT INTO test VALUES (1,'LATA');
    INSERT INTO test VALUES (2,'KING');
    COMMIT;
    

      主外键设计其他约束条件:

    drop table test cascade constraints;
    create table test as select rownum object_id,object_name from dba_objects where rownum<=20;
    ALTER TABLE test ADD CONSTRAINT pk_object_id PRIMARY KEY(object_id) DEFERRABLE INITIALLY DEFERRED;
    INSERT INTO test VALUES (21,'ABC'); 
    INSERT INTO test VALUES (21,'EFG');
    COMMIT;
    SET CONSTRAINT pk_object_id IMMEDIATE;
    INSERT INTO test VALUES (1,'LATA');
    INSERT INTO test VALUES (2,'KING');
    COMMIT;
    

      表压缩:

    ---压缩表可减少数据量,从而减少IO
    
    DROP TABLE t purge;
    
    CREATE TABLE t NOCOMPRESS AS
    SELECT rownum AS n, rpad(' ',500,mod(rownum,15)) AS pad
    FROM dual
    CONNECT BY level <= 200000;
    
    execute dbms_stats.gather_table_stats(ownname=>user, tabname=>'t');
    
    --未压缩的表当前情况
    SELECT table_name, blocks,compression  FROM user_tables WHERE table_name = 'T';
    TABLE_NAME                         BLOCKS COMPRESS
    ------------------------------ ---------- --------
    T                                   14449 DISABLED
    set autotrace traceonly
    select count(*) from t;
    
    执行计划
    -------------------------------------------------------------------
    | Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |
    -------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |      |     1 |  3922   (1)| 00:00:48 |
    |   1 |  SORT AGGREGATE    |      |     1 |            |          |
    |   2 |   TABLE ACCESS FULL| T    |   200K|  3922   (1)| 00:00:48 |
    -------------------------------------------------------------------
    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
          14297  consistent gets
              0  physical reads
              0  redo size
            423  bytes sent via SQL*Net to client
            416  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed
          
    --开始压缩表
    set autotrace off
    ALTER TABLE t MOVE COMPRESS;
    execute dbms_stats.gather_table_stats(ownname=>user, tabname=>'t');
    SELECT table_name, blocks,compression  FROM user_tables WHERE table_name = 'T';
    TABLE_NAME                         BLOCKS COMPRESS
    ------------------------------ ---------- --------
    T                                    2639 ENABLED
    
    set autotrace traceonly 
    select count(*) from t;
    
    执行计划
    -------------------------------------------------------------------
    | Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |
    -------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |      |     1 |   718   (1)| 00:00:09 |
    |   1 |  SORT AGGREGATE    |      |     1 |            |          |
    |   2 |   TABLE ACCESS FULL| T    |   200K|   718   (1)| 00:00:09 |
    -------------------------------------------------------------------
    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
           2595  consistent gets
              0  physical reads
              0  redo size
            423  bytes sent via SQL*Net to client
            416  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed
              
    注意:压缩后的表更新的开销会更大,查询耗费的CPU也更多。所以压缩表一般适合在更新比较少,且CPU消耗不大,IO消耗很大系统中试用。
    

      索引压缩:

    ---压缩索引(联合索引的压缩层度会高一些)
    DROP TABLE t1 purge;
    
    CREATE TABLE t1 AS select * from dba_objects;
    alter table T1 modify owner not null;
    alter table T1 modify object_name not null;
    alter table T1 modify object_type not null;
    insert  into t1 select * from t1;
    insert  into t1 select * from t1;
    commit;
    create index idx1_object_union  on t1(owner,object_type,object_name);
    execute dbms_stats.gather_index_stats(ownname=>user, indname=>'idx1_object_union');
    
    --未压缩索引的当前情况
    SELECT t.index_name,t.compression,t.leaf_blocks,t.blevel  FROM user_indexes t WHERE index_name = 'IDX1_OBJECT_UNION';
    
    INDEX_NAME                     COMPRESS LEAF_BLOCKS     BLEVEL
    ------------------------------ -------- ----------- ----------
    IDX1_OBJECT_UNION              DISABLED        2043          2
    
    --开始压缩索引
    drop table t2 purge;
    create table t2 as select * from t1;
    alter table T2 modify owner not null;
    alter table T2 modify object_name not null;
    alter table T2 modify object_type not null;
    create index idx2_object_union  on t2(owner,object_type,object_name);
    ALTER index  idx2_object_union  rebuild  COMPRESS;
    execute dbms_stats.gather_index_stats(ownname=>user, indname=>'idx2_object_union');
    
    SELECT t.index_name,t.compression,t.leaf_blocks,t.blevel  FROM user_indexes t WHERE index_name = 'IDX2_OBJECT_UNION';
    
    INDEX_NAME                     COMPRESS LEAF_BLOCKS     BLEVEL
    ------------------------------ -------- ----------- ----------
    IDX2_OBJECT_UNION              ENABLED          907          2
    
    
    set linesize 1000
    set autotrace traceonly
    select count(*) from t1 ;
    
    执行计划
    -----------------------------------------------------------------------------------
    | Id  | Operation             | Name              | Rows  | Cost (%CPU)| Time     |
    -----------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT      |                   |     1 |   572   (1)| 00:00:07 |
    |   1 |  SORT AGGREGATE       |                   |     1 |            |          |
    |   2 |   INDEX FAST FULL SCAN| IDX1_OBJECT_UNION |   251K|   572   (1)| 00:00:07 |
    -----------------------------------------------------------------------------------
    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
           2067  consistent gets
              0  physical reads
              0  redo size
            425  bytes sent via SQL*Net to client
            415  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed
              
    select count(*) from t2 ;
    
    执行计划
    -----------------------------------------------------------------------------------
    | Id  | Operation             | Name              | Rows  | Cost (%CPU)| Time     |
    -----------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT      |                   |     1 |   258   (1)| 00:00:04 |
    |   1 |  SORT AGGREGATE       |                   |     1 |            |          |
    |   2 |   INDEX FAST FULL SCAN| IDX2_OBJECT_UNION |   282K|   258   (1)| 00:00:04 |
    -----------------------------------------------------------------------------------
    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
            922  consistent gets
              0  physical reads
              0  redo size
            425  bytes sent via SQL*Net to client
            415  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed
    

      列值如何存放:

    --什么类型就放什么值,否则会发生类型转换,导致系能问题!
    --(是存放字符的字段就设varchar2类型,是存放数值的字段就设置number类型,是存放日期的字段就设置date类型)
    
    --举例说明:
    drop table t_col_type purge;
    create table t_col_type(id varchar2(20),col2 varchar2(20),col3 varchar2(20));
    insert into t_col_type select rownum,'abc','efg' from dual connect by level<=10000;
    commit;
    create index idx_id on t_col_type(id);
    set linesize 1000
    set autotrace traceonly
    
    select * from t_col_type where id=6;
    
    执行计划
    --------------------------------------------------------------------------------
    | Id  | Operation         | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |            |     1 |    36 |     9   (0)| 00:00:01 |
    |*  1 |  TABLE ACCESS FULL| T_COL_TYPE |     1 |    36 |     9   (0)| 00:00:01 |
    --------------------------------------------------------------------------------
       1 - filter(TO_NUMBER("ID")=6)
    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
             32  consistent gets
              0  physical reads
              0  redo size
            540  bytes sent via SQL*Net to client
            415  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed
    
    --实际上只有如下写法才可以用到索引,这个很不应该,是什么类型的取值就设置什么样的字段。
              
    select * from t_col_type where id='6';
    执行计划
    ------------------------------------------------------------------------------------------
    | Id  | Operation                   | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
    ------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT            |            |     1 |    36 |     2   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS BY INDEX ROWID| T_COL_TYPE |     1 |    36 |     2   (0)| 00:00:01 |
    |*  2 |   INDEX RANGE SCAN          | IDX_ID     |     1 |       |     1   (0)| 00:00:01 |
    ------------------------------------------------------------------------------------------
       2 - access("ID"='6')
    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
              4  consistent gets
              0  physical reads
              0  redo size
            544  bytes sent via SQL*Net to client
            415  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed   
    

      过时的字段:

    CHAR和LONG基本要被VARCHAR2和CLOB等替换,属于已经过时的字段类型。
    
    其中CHAR不利扩展,且有可能浪费空间。
    而LONG的更新查询操作极为麻烦!
    

      

  • 相关阅读:
    git(1)-git关联GitHub-windows-转载
    jenkins(4)-jenkins配置邮件通知
    jenkins(3)-linux下安装jenkins(yum install方式)
    【PAT甲级】1090 Highest Price in Supply Chain (25 分)(DFS)
    【PAT甲级】1087 All Roads Lead to Rome (30 分)(MAP【int,string】,邻接表,DFS,模拟,SPFA)
    【PAT甲级】1018 Public Bike Management (30 分)(DFS,SPFA)
    Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
    Atcoder Grand Contest 032C(欧拉回路,DFS判环)
    Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
    Atcoder Grand Contest 031C(构造,思维,异或,DFS)
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/12306809.html
Copyright © 2011-2022 走看看