1、查看redo size
where a.STATISTIC# = b.STATISTIC#
and a.NAME = 'redo size';
select a.name, b.value
from v$statname a, v$mystat bwhere 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语言课程设计) 哈希表是一种高效的数据结构,它可以快速地存储、检索和删除数据。在计算机科学与技术领域中,哈希表是一种常用的数据结构。以下是关于哈希表的设计与实现的详细知识点: 一...
《电子式电能表设计》是一项综合性的工程项目,旨在开发一款高效、准确的单相电子式电能表。本文档详细介绍了设计的核心理念、组成部分、技术细节以及实施过程中的调试和测试策略。以下是对该设计的主要知识点的深入...
4. 数据安全性:数据库表设计应该确保数据的安全性,即数据不能被未经授权的访问或修改。 三、数据库表设计步骤 数据库表设计是一个复杂的过程,需要按照一定的步骤进行。常见的数据库表设计步骤包括: 1. 需求...
本文设计基于DAQ及LabVIEW的虚拟数字电压表,旨在解决传统的数字电压表设计中存在的问题,如投资大、技术更新快、维护困难等。通过虚拟仪器技术,设计了一款基于DAQ及LabVIEW的虚拟数字电压表,具有灵活性高、系统...
标题中的“一种量程自动切换数字电压表的设计”是指一种具备智能量程切换功能的数字电压测量设备。这种电压表可以自动识别输入电压的大小,并根据电压范围选择合适的量程,以确保测量精度并防止仪表过载。在设计中,...
【用户表角色权限表的设计】涉及的是应用系统中权限管理的核心构建,主要目的是构建一个灵活、通用且易于管理的权限控制系统。权限系统是系统安全的关键组成部分,能够有效地控制用户对系统资源的访问,确保信息的...
4. **关系设计**:支持创建和管理表格间的关系,如外键、主键,确保数据的一致性和完整性。 5. **字段属性设定**:允许用户定义字段的数据类型、长度、是否允许为空、默认值等属性,确保数据符合业务需求。 6. **...
哈希表的设计与实现课程设计 问题描述:针对某个单位电话号码簿,设计一个哈希表,并完成相应的建表和查表程序。 基本要求:设每个记录有下列数据项:电话号码、用户名、住址。从键盘输入各记录,以用户名为关键字...
总结来说,基于RBAC的权限管理数据库表设计涵盖了角色、权限、用户、角色-权限关联、用户-角色关联等多个核心组件,通过这些组件的组合,可以构建出一个强大且易于维护的权限管理体系。在实际应用中,还可以根据业务...
在本项目中,"Android课程表设计(含设计,代码)"是一个综合性的学习资源,旨在帮助学生或开发者掌握如何在Android平台上构建一个实用且功能完善的课程表应用。这个资源包含设计思路、实现代码以及可能的试验报告和...
基于单片机的电子式转速里程表的设计说明 本文主要介绍了一种基于单片机的电子式汽车转速里程表的设计方案。该设计方案的核心是AT89C2051单片机,利用SPI串行总线开发了电子式里程表。该里程表利用磁电式传感器采样...