• 创建高效且易于管理的表以及表的管理和维护


    一、创建表的原则;

      将不同的表放在不用的表空间中

      使用本地管理的表空间避免系统表空间碎片

      在表中使用若干标准extent尺寸以减少表空间的碎片

    创建本地管理的表空间上的表时可以在后面添加 tablespace tablespace_name子句。在数据字典管理的表空间上创建表时可以同时制定存储参数。

      storage(initial 100k next 100k pctincrease 0 minextents 1 maxextents 100) tablespace tablespace_name;另外还可以使用pctfree,pctused,initrans,maxtrans等参数

    二、创建临时表:当需要对某一个或者几个表中的一批数据进行反复操作时,通过为这批数据创建一个临时表可能会简化操作并且有可能会提高效率。

      create global temporary table

        schom_name.table_name

        on commit preserve/delete rows

        as

        select * form table_name1 where ........

    临时表中存储的是会话的私有数据,这些数据只有在事务进行或者会话期间存在。通过on commit preserve/delete rows来控制数据的存在周期

      delete说明数据只有在事务中可见也是默认值

      preserve说明数据行在整个会话中可见

    每一个会话只能看到和修改自己的数据,因此在临时表的数据上没有也不需要dml锁,这就是临时表操作效率较高 的原因之一。

    临时表并不使用默认的表空间而是使用临时段存储数据即临时表空间上存储数据。

    三、表的管理和维护

    表的管理和维护主要是针对表的存储参数的设置。可以从storage子句中修改或者直接动态修改表的存储参数

    其中常用修改的参数包括pctfree pctused

    ex:alter table table_name

      pctfree value1

      pctused value2

    在大规模装入数据之前为了避免表的动态扩展,可以手工的扩展extent,另外为了平衡i/0可以把extent分配到不同的数据文件中

    alter table table_name

      allocate extent[([size 正整数 [k|M]]

      [datafile '数据文件名'])]

    如果省略了size子句那么oracle将从dba_tables中获得next_extent值来分配extent,如果省略了datafile子句那么oracle将从包含该表的表空间中的数据文件上分配extent。另外datafile子句指定的文件必须是包含该表的表空间中的数据文件。

    获取segment的sql

    select segment_name,tablespace_name,extents from dba_segments

      where owner='OWNER'

      and segment_name like '%table_name%'; 

    获得指定表的区段中extent的个数,验证是否成功手动添加extent到表中。

    注:查看一个用户的默认表空间和临时表空间上的sql:

    select username, default_tablespace, temporary_tablespace
    from dba_users;

    对一个用户设置默认表空间和临时表空间后,在用户进行数据库对象的创建和数据的操作时,如果不显示的指定表空间和临时表空间那么就使用默认表空间和默认临时表空间来存储数据库对象。

    使用dba_indexes数据字典查看对应的index是建立在哪张表上的,是基于哪个tablespace的

    select index_name,index_type,table_name,tablespace_name from dba_indexes where owner='OWNER_NAME';

        

  • 相关阅读:
    Oracle中的substr()函数和INSTR()函数和mysql中substring_index函数字符截取函数用法:计算BOM系数用量拼接字符串*计算值方法
    (转载)SDRAM驱动笔记
    【转】Verilog阻塞与非阻塞赋值使用要点
    【转转】(筆記) always block內省略else所代表的電路 (SOC) (Verilog)
    (原創) 如何處理signed integer的加法運算與overflow? (SOC) (Verilog)
    [转载]亚稳态
    Dev Exprss 发布部署
    Dev splliter 去除中间的分割显示
    DevTreeList中的新增、修改的设计
    Oracle 常用网址
  • 原文地址:https://www.cnblogs.com/moonfans/p/3871875.html
Copyright © 2020-2023  润新知