普通堆表不足之处:
表更新有日志开销
表删除有瑕疵
表记录太大检索较慢
索引回表读开销很大
有序插入难有序读出
DELETE产生的undo最多,redo也最多,因为undo也需要redo保护
《收获,不止Oracle》(高清扫描完美书签PDF) 下载:
全局临时表:
1 高效删除记录
基于事务的全局临时表commit或者session连接退出后,自动删除
基于回话的全局临时表在退出回话后自动删除
2 针对不同的会话数据独立,不同的session访问全局临时表,看到的结果不同
全局临时表在程序的一次调用执行过程中,需要多次清空记录再插入记录,就考虑使用基于是无敌额
分区表
--分区表删除 alter table range_part_tab truncate partition p9; --分区表交换 alter table range_part_tab exchange partition p9 with table mid_table; --分区表的分割 alter table range_part_tab split partition p_max at(to_date(,))into (partition p2013_01,partition p_max); --分区表合并 alter table range_part_table merge partitions p2013_01,p_max into partition p_max;
SCN,保证数据一致读,解决了读一致性的问题,避免使用锁
1 startup nomount 寻找定位 参数文件(SGA共享内存段开启,后台进程开启)
2 alter database mount 寻找定位 控制文件(其中包含 数据文件 日志文件 检查点信息等)
3 alter database open 寻找定位 数据文件 日志文件等
全部命令融合在shutdown immediate里面
database closed.
database dismounted.
oracle instance shut down.
各文件查找位置:
show parameter spfile;
show parameter control;
sqlplus "/ as sysdba"
select file_name from dba_data_files;
select group#,member from v$logfile;
show parameter recovery;
setlinesize 1000;
show parameter dump;
cd /home/oracle/admin/itmtest/bdump
ls -lart alert*
OLTP倾向于让块的尺寸小一些:因为如果块太大,容易导致大量并发查询及更新操作都指向同一个数据块,从而产生热点块竞争。
Leaf 主要存储了 key column value 以及 具体能定位到数据块所在位置的rowid
索引特点:
高度比较低
存储索引列还有rowid
本身是有序的
MIN MAX的索引优化:INDEX FULL SCAN(MINMAX)
select max(object_id) from t; select max,min from (select max(object_id) max from t) a,(select min(object_id) min from t) b;
索引回表读(TABLE ACCESS BY INDEX ROWID)
如
select * from t where object_id create table t ( processed_flag varchar2(1) ); Table created. ORA10G> create bitmap index t_idx on t(processed_flag); Index created. ORA10G> insert into t values ( 'N' ); 1 row created.
现在,如果在另一个SQL*Plus会话中执行以下命令:
ORA10G> insert into t values ( 'N' );
这条语句就会“挂起”,直到在第一个阻塞会话中发出COMMIT为止。
: