普通堆表不足之处:

    表更新有日志开销
    表删除有瑕疵
    表记录太大检索较慢
    索引回表读开销很大
    有序插入难有序读出
 
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)列,所谓低基数列就是指这个列只有很少的可取值,所以看上去位图索引是一个很自然的选择。
不过,所有问题的根由正是这个位图索引。采用位图索引,一个键指向多行,可能数以百计甚至更多。如果更新一个位图索引键,那么这个键指向的数百条记录会与你实际更新的那一行一同被有效地锁定。
所以,如果有人插入一条新记录(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为止。

转载于:https://www.cnblogs.com/xing901022/p/3978089.html

【面试虐菜】—— Oracle知识整理《收获,不止Oracle》相关推荐

  1. 【面试虐菜】—— LVS负载均衡

    Load Balancer(负载均衡器): Load Balancer是整个集群系统的前端,负责把客户请求转发到Real Server上.Load Balancer通过Ldirectord监测各Rea ...

  2. 不止 oracle,别出心裁 另有蹊径-与梁敬彬《收获,不止ORACLE》序

    别出心裁 另有蹊径-与梁敬彬<收获,不止ORACLE>序 梁敬彬兄弟二人联手打造的新书<收获,不止ORACLE>即将出版,嘱我写一点东西,于是就有了以下一段文字,感谢他们与Or ...

  3. 【面试虐菜】—— MongoDB知识整理

    为什么我们要使用MongoDB? 特点: 高性能.易部署.易使用,存储数据非常方便.主要功能特性有: 面向集合存储,易存储对象类型的数据. 模式自由. 支持动态查询. 支持完全索引,包含内部对象. 支 ...

  4. 收获不止oracle在线,重温《收获不止Oracle》

    闲在家里,正好重新查缺补漏 第一章:方法论: 第二章:物理体系.回滚段与SCN对读一致性的意义.LGWR只能单进程.频率归档日志会引起数据写入效率下降.Oralce的启动顺序(读参数文件.控制文件.数 ...

  5. oracle中常见ck和fk是什么,oracle知识整理

    额滴数据库太薄弱了,整理一下知识点吧: 外键(foreign key)约束: 在建表之后,为表增加外键约束可以像下面这样操作: 为表增加外键约束: 1.alert table student 2.ad ...

  6. 【面试虐菜】—— JAVA面试题(2)

    前篇推荐:http://www.cnblogs.com/xing901022/p/3975626.html 1 String = 与 new 的不同 使用"="赋值不一定每次都创建 ...

  7. 【面试虐菜】—— 常用SQL语句

    创建表 create table emp(id decimal,name char(10),age decimal) 删除表 DROP TABLE EMP 插入默认值 CREATE TABLE EMP ...

  8. 【面试虐菜】—— JAVA面试题(3)

    1 throws与throw的区别 解析:throws和throw是异常处理时两个常见的关键字,初级程序员常常容易正确理解throw和throws的作用和区别,说明已经能比较深入理解异常处理.Thro ...

  9. *Java软件开发面试知识整理*

    Java软件开发面试知识整理 围绕以下几点回答问题:是什么.为什么.什么时候用.项目实现.解决什么问题.遇到的困难 谈谈你对Java和C的理解? Java: 面向对象.Unicode:可以跨平台(JV ...

最新文章

  1. 生成式对抗网络的原理和实现方法
  2. java oracle exp_java中使用oracle的exp/imp导出、导入数据
  3. ISO语言代码和国家代码+Locale常量+ISO货币符号
  4. 表必须要有主键吗_玄关隔断什么材质好?玄关隔断必须要做吗?
  5. sql server累计求和函数_窗口函数 以及 储存过程 create procedure
  6. python docker库
  7. PyTorch实战福利从入门到精通之七——卷积神经网络(LeNet)
  8. 第16课 “远程 Git文档库” 的基础操作
  9. RIA 应用程序模式
  10. python 代码分块_python大数据分块处理
  11. 5. CopyOnWriteArrayList 的适用场景
  12. linux scp 使用简单说明
  13. linux 分区100g整数,硬盘分区 整G 整数 法(从1g到200g最精确的整数分区)(转)...
  14. wget无法批量下载气象数据的解决方案(Python、迅雷批量下载气象数据方法)
  15. 简单快捷的ArcGIS 10.7安装方法
  16. 大话布隆过滤器及其应用场景
  17. 计算机制图员主要学什么,制图员
  18. Oracle greatest函数
  19. safari html5插件安装,Safari巧用小插件 体验不输第三方浏览器
  20. .net famework 版本过低,请升级至4.6.2或更新版本

热门文章

  1. Win7编译volley成jar包
  2. android 自定义录像机,android-camera2 - 将自定义捕获请求构建器选项设置为使用Camera2 API捕获图像以使用OpenCV库进行摄像机校准 - 堆栈内存溢出...
  3. java正则表达式课程_通过此免费课程学习正则表达式
  4. firebase 推送_如何使用Firebase向Web应用程序添加推送通知?
  5. 统一建模语言——UML(第9-20课时)(cont.)
  6. selenium--iframe之模拟qq空间登录
  7. Qt运行时中文乱码的解决办法
  8. Sass函数:Sass Maps的函数-map-has-key($map,$key)
  9. java实现用户登录注册功能(用集合框架来实现)
  10. asp.net文件上传下载的简单实现