ACCESS【面试虐菜】—— Oracle知识整理《收获,不止Oracle》

万般堆表不足之处:

    表更新有日记开销

   
表删除有欠缺

   
表记录太可怜搜索比缓

   
索引回表读开销很可怜

   
有序插入难有序读出

 

DELETE产生的undo最多,redo也最多,因为undo也需要redo保护

 

大局临时表:

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('2013-02-01','YYYY-MM-DD'))into (partition p2013_01,partition p_max);

--分区表合并
alter table range_part_table merge partitions p2013_01,p_max into partition p_max;

 

SCN,保证数据一致读,解决了读一致性的问题,避免以锁

 

 

Oracle被同关过程

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(MIN\MAX)

    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 <=5;

因为是select
* 查询完索引列后,还欲返回查询其他一切的价值

 

INDEX
RANGE SCAN
针对索引高度比较逊色之特点实现之等同种范围扫描,在回去记录非常少时一定迅速。

 

INDEX
FAST FULL SCAN 针对任何索引的咸扫描,一不良读博多只寻引块

INDEX
FULL SCAN
针对任何索引的净扫描,一涂鸦读取一个索引块,有利于数据的排序,在count*的场合特别适用,但是逻辑读多了

 

Union,对少数个结实集进行并集操作,不包再复行,同时展开默认规则的排序;

Union
All,对少数单结果集进行并集操作,包括再复行,不进行排序;

 

主外键:

    1
主键本身是一样种植索引

    2
足以保表中主键所在列的唯一性

    3
可以有效之限定外键依赖的说明的笔录之完整性

 

设有表建立的目录过多,插入数据的时刻会杀缓慢。可以去索引后,插入,再树目录。可以优化很怪片段的时光。

 

找引了多,对三栽操作的影响:

1
对insert影响极其老,只要来目录,就会见变换缓慢,越多越慢。

2
对delete来说,有好有坏,在海量数据删除较少多少的时段,很有因此。但是过多的目,也会见使得其他的目进行创新时代价变大。

3
对update的熏陶无与伦比小。

 

建立索引会引起一切表底沿,使得表被高悬于,任何操作无法实施。

 

alter
index 索引名 monitoring usage;

select * from v$object_usage;--查询索引是否被使用

alter index 索引名 nomonitoring usage;--解锁索引监控

 

各队图索引允许存储吗空值(缺点,进行插队的上,同一个索引的值相同,是插不登的)

 

确立各项图索引适合的星星只尺码:1
个图索引列大量还 2 该表极少更新

 

为什么各图索引才适用于低位基数值,但是针对反复更新的排非适用。
因在,PROCESSED_FLAG列只发零星单价:Y和N。对于插入到表中的记录,该列值为N(表示未处理)。其他进程读取和处理者记录时,就见面管该列值从N更新为Y。这些过程使高效地找来PROCESSED_FLAG列值为N的笔录,所以开发人员知道,应该本着是列建立目录。他们以别处了解及,位图索引适用于低位基数(low-cardinality)列,所谓低基数列就是因者列只发特别少之而取值,所以看上去位图索引是一个雅自然之选取。
而,所有题目之由来正是这个位图索引。采用各类图索引,一个键指向多执行,可能数以百计甚至又多。如果更新一个个图索引键,那么是键ACCESS指向的数百长达记录会与君实在创新的那一行同给中地锁定。
从而,如果有人插队入一漫漫新记录(PROCESSED_FLAG列值为N),就会锁定位图索引中之N键,而及时会使得地同时锁定另外数百长PROCESSED_FLAG列值为N的笔录(以下记作N记录)。此时,想如果读之表并处理记录的历程就无法将N记录修改也Y记录(已处理的笔录)。原因是,要惦记管这列从N更新也Y,需要锁定和一个员图索引键。实际上,想当这个表中插入新记录的另会话也会卡住,因为它同样想对之位图索引键锁定。简单地谈,开发人员实现了这般平等组组织,它同不行顶多才同意一个丁插入或更新!
得据此一个简约的例证说明这种状况。在是,使用简单个会说话来显示阻塞很易产生:

ORA10G> 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为止。

相关文章