`

4、表的设计

阅读更多
1、查看redo size
     select a.name, b.value 
     from v$statname a, v$mystat b
     where a.STATISTIC# = b.STATISTIC#
     and a.NAME = 'redo size';
     在执行某个sql前执行一下得到结果A,在执行一个sql之后,再次执行上面的脚本,得到结果B
     B - A 就是 执行的sql带来的回滚日志开销大小
     
2、因为delete操作产生的undo操作最多,且undo本身也需要redo来保证安全性,
     所以在insert、update、delete三个操作中,delete操作的undo量和redo量是最多的,开销最大
 
3、delete操作虽然删除了很多记录,但是block并没有被回收,全部是空块
     而truncate操作则是回收了block
     所以delete是无法释放空间的
     另外,delete是DML操作,truncate是DDL操作
 
     另外,大量的delete之后,再次insert时,会优先插入那先空块
 
4、大表检索的优化思路
     表就是段,要使检索的效率提升,就要使遍历该segment的路径最短(即访问的block最少)
     保持路径短的方式有:
     1)索引
          查询时先访问索引段(索引是独立的段,其中存储了索引段与表段的映射关系)
          如果一个查询能只从索引段中获取所有返回数据,则性能最优
          如果需要根据索引段信息返回表段获取数据,性能次之
          如果使用不上索引段,性能再次之。
          (不过索引建立的不好的话,也是灾难性的问题)
          针对一个场景:在表T上建立了索引IDX_ID,
          select id from t 的 开销比 select * from t 要少很多,
          但是如何使上述两个脚本的开销一致呢?(索引组织表
     2)分区
          根据关键维度将数据进行分区存储和管理
          既能减少block的访问路径,还能高效的清理数据
 
5、数据有序插入难以有序读出来
     插入N条数据后,删除中间的一条数据,然后再插入一条数据
     然后select,发现数据不一定是按顺序来的
     因为后面insert的数据insert到数据被删除的block上了
     而要是继续有序,则必须使用order by 
     而众所周知,order by是非常耗资源和性能的
     避免order by的方式有两个:
     1)在排序列上建立索引
     2)将表改造为 有序散列聚簇表
 
6、分区表
     四个大类:范围分区(最常用)、列表分区、散列分区(hash)、组合分区(主分区+从分区方式)
     分为多少个区,就会产生多少个段(segment)
     分区过多的话,oracle需要管理过多的段,在操作分区时容易引起内部大量的递归调用等等,所以会产生比较高的代价
     建议单表在100W以上数据时才进行分区
     特性:
     1)高效分区消除,即数据查询范围比较集中,减少逻辑读
     2)局部数据清理更快捷(允许的情况下可以直接使用truncate以释放空间)
     3)分区数据转移:将某个分区的数据与一张中间表进行交换
          alter table 分区表名称 exchange partition 具体的某一个分区名 with table 中间表
          示例:alter table range_part_tab exchange partition p8 with table mid_tab;
                    将分区表 range_part_tab 的 分区p8 中的数据与 mid_tab 进行交换
                    再次执行这个sql,数据又会被交换回来
     4)分区切割
          alter table 分区表名称  split  partition 具体的某一个分区名  at (分区界限)  into (partition 切割后的前一个分区名, partition 切割后的后一个分区名)
     5)合并分区
          alter table 分区表名称 merge partitions 分区1,分区2 into partition 合并后的分区名
     6)新增分区
          当追加的分区界限比最后一个分区的界限低时,无法新增,需要先想办法将大于该界限的分区删除
          alter table 分区表 add partition 分区名 values less then (分区界限)
     7)删除分区
          alter table 分区表 drop partition 分区名;
分享到:
评论

相关推荐

    数据库表设计工具

    4. **数据库表设计**:此过程涵盖了需求分析、概念数据模型设计、逻辑数据模型设计和物理数据模型设计。工具如EZDML可以帮助用户在各个阶段进行设计,从ER图(实体关系图)到DDL(Data Definition Language)脚本的...

    数字电压表设计 程序设计和电路图

    本项目将详细讲解一个能够测量0-5V范围内8路输入电压值的数字电压表的设计过程,包括程序设计、电路图、程序流程图以及方案设计。这种数字电压表具有0.01V的测量分辨率和约正负0.02V的绝对测量误差,适用于多种实验...

    多种权限表的设计(数据库设计)

    4. **接口设计(略)** 接口设计包括用户接口、外部接口和内部接口,这部分详细设计可能涉及到用户登录、权限查询、角色分配等功能,但在此文档中未展开。 5. **界面设计(略)** 界面设计应直观易用,统一页面...

    数字万用表设计很详细的

    本章节将对数字万用表设计的多个方面进行介绍,包括基本数字直流电压表、可变量程数字直流电压表、数字直流电流表、数字交流电压表/交流电流表和数字电阻表等。 18.3 基本数字直流电压表 数字电压表的核心是 A/D ...

    表结构设计器

    4. **索引创建**:索引可以加速数据查询,表结构设计器提供了创建索引的功能,包括唯一索引和非唯一索引,以及全文索引等,有助于优化查询性能。 5. **视图设计**:除了实体表之外,表结构设计器还支持视图的设计。...

    采购订单数据表的设计

    在IT行业中,数据库设计是至关重要的一步,尤其在企业级应用中,良好的数据表设计能够保证数据的一致性、完整性和高效性。本话题聚焦于“采购订单数据表的设计”,这是一个涉及订单管理、数据库结构以及采购流程的...

    哈希表的设计与实现(C语言课程设计)

    哈希表的设计与实现(C语言课程设计) 哈希表是一种高效的数据结构,它可以快速地存储、检索和删除数据。在计算机科学与技术领域中,哈希表是一种常用的数据结构。以下是关于哈希表的设计与实现的详细知识点: 一...

    电子式电能表设计毕业论文.doc

    《电子式电能表设计》是一项综合性的工程项目,旨在开发一款高效、准确的单相电子式电能表。本文档详细介绍了设计的核心理念、组成部分、技术细节以及实施过程中的调试和测试策略。以下是对该设计的主要知识点的深入...

    数据库表设计数据库表设计.doc

    4. 数据安全性:数据库表设计应该确保数据的安全性,即数据不能被未经授权的访问或修改。 三、数据库表设计步骤 数据库表设计是一个复杂的过程,需要按照一定的步骤进行。常见的数据库表设计步骤包括: 1. 需求...

    基于DAQ及LabVIEW的虚拟数字电压表的设计

    本文设计基于DAQ及LabVIEW的虚拟数字电压表,旨在解决传统的数字电压表设计中存在的问题,如投资大、技术更新快、维护困难等。通过虚拟仪器技术,设计了一款基于DAQ及LabVIEW的虚拟数字电压表,具有灵活性高、系统...

    一种量程自动切换数字电压表的设计

    标题中的“一种量程自动切换数字电压表的设计”是指一种具备智能量程切换功能的数字电压测量设备。这种电压表可以自动识别输入电压的大小,并根据电压范围选择合适的量程,以确保测量精度并防止仪表过载。在设计中,...

    毕业设计进度表

    毕业设计进度表是确保学生按照计划有效地进行项目开发,最终按时完成毕业要求的关键工具。 首先,我们要明确毕业设计的最终提交材料。这包括四个主要部分: 1. **开题报告**:开题报告是毕业设计的起点,它概述了...

    用户表角色权限表的设计

    【用户表角色权限表的设计】涉及的是应用系统中权限管理的核心构建,主要目的是构建一个灵活、通用且易于管理的权限控制系统。权限系统是系统安全的关键组成部分,能够有效地控制用户对系统资源的访问,确保信息的...

    哈希表的设计与实现【课程设计】

    哈希表的设计与实现课程设计 问题描述:针对某个单位电话号码簿,设计一个哈希表,并完成相应的建表和查表程序。 基本要求:设每个记录有下列数据项:电话号码、用户名、住址。从键盘输入各记录,以用户名为关键字...

    Android课程表设计(含设计,代码)

    在本项目中,"Android课程表设计(含设计,代码)"是一个综合性的学习资源,旨在帮助学生或开发者掌握如何在Android平台上构建一个实用且功能完善的课程表应用。这个资源包含设计思路、实现代码以及可能的试验报告和...

    基于单片机的电子式转速里程表的设计说明.doc

    基于单片机的电子式转速里程表的设计说明 本文主要介绍了一种基于单片机的电子式汽车转速里程表的设计方案。该设计方案的核心是AT89C2051单片机,利用SPI串行总线开发了电子式里程表。该里程表利用磁电式传感器采样...

    产生均匀设计表

    4. **分析和评估**:生成设计表后,会进行中心化偏差的计算和评估。如果偏差值不满足要求,可能需要调整设计参数,如增加因素的水平数或者改变设计的阶数,然后重新生成设计表。 5. **实施实验**:最后,按照生成的...

Global site tag (gtag.js) - Google Analytics