99%的应用在使用到表的时候,都是使用堆表。Heap,这是一个无序的空间,插入的数据会找到一个合适的位置来存储,带有随机性,而不是按插入的顺序来存储。所以,在全表扫描的时候,返回的数据是按照空间检索的顺序来找到并返回记录。
索引组织表
和堆表相比起来,索引组织表的所有的数据都是保存在索引的数据结构里面,存在索引段里面而非表段,所有的数据插入都是有序的放置在指定的连续的块,索引就是数据。这样做的好处就是在通过主键索引查询的时候,能够获得更快的查询速度。代价则是由于索引是很复杂的数据结构,在插入新数据的时候,相比起堆表来会有很多更复杂的动作,对性能有一定的影响。
数据的存储更加紧密,相邻的数据都在相同的块里面,带来的好处就是减少了IO的操作,同时提高了缓存的可用性命中率。
创建的关键字为 organization index
聚簇, 聚簇表,聚簇索引的概念对比
聚簇是一个定义,一种数据保存的方式: 把相关联的数据放在同一个块里面。
create cluster emp_dept_cluster (id number);
聚簇表: 采用聚簇方式建立的表,和普通的表的区别是,需要定义聚簇的名字,以及相关的聚簇键
create table dept
(
id number primary,
name varcahr2(20),
location varcahr2(20)
)
cluster emp_dept_cluster(id);
emp_dept_cluster:为表创建的聚簇,聚簇名
Id: 聚簇的建立是基于id的值
聚簇索引:
这种索引和其他索引并无太大区别,只是他指向的是一个聚簇块。 一般的索引指向的是数据块。
create index emp_dept_cluster_idex on cluster emp_dept_cluster;
索引聚簇表
如果许多表有相同的列,那么这组表都保存到相同的数据块中,(A.id=B.id),等到这些个表需要进行关联的时候,就能以很小的IO代价找到这两个id列所在的块进行匹配。从概念上讲是对表的join进行了“预链接”, 提高join的效率
另外也会把同一个表里面把数据按列分组存储,目标只有一个,那就是减少IO,加快检索的速度。
创建的方法和正常创建的区别就是在列定义后面增加了 cluster参数
从以上的特性可以看出,如果需要频繁修改,全表扫描,频繁Truncate 或者是需要分区的情况下,都不能使用聚簇表。
而只读情况下,聚簇表就很适用。
散列聚簇表:
这种聚簇表和索引聚簇表的唯一区别就在于,没有索引,他通过聚簇块里面列的值,算出一个散列值x23j87d,然后这个值来找到整个row的位置。而索引聚簇表,通过聚簇快的索引,找到相应的行的rowId.
创建散列聚簇:
create cluster emp_dept_cluster (id number) hashkeys 1000;
在聚簇上建表:
create table dept
(
id number primary,
name varcahr2(20),
location varcahr2(20)
)
cluster emp_dept_cluster(id);
使用这种表的的一个好处,是单条数据查询,join非常快。 但是连续区间的查询就非常慢,需要进行全表扫描。
临时表
使用create global temporrary table temp_table
这种表的内容只存在于回话期间,在回话结束的时候就会清理。首先在性能上非常的卓越。几乎没有redo,所以没有IO。 同时,清理表,也不需要delete语句。
所以相比使用普通表来作为临时表的方法,这种真正的临时表在性能上有着巨大的优越性。
一个使用的误区:
很多时候使用临时表的目的,把很多个查询语句的结果集放到一个临时表里面insert,最后把这个结果集select出来,进行其他的处理。这种方法没有错,但是相比起把所有的小select 语句union成一个大的select语句,然后去处理结果集,这种后者的效率要高很多。
外部表
数据表存储在数据库外面,就像是普通的文件一样。通常是用作想数据库加载数据。 10g以后还引入了外部表卸载功能,更加方便了数据库之间数据的移动。
相关推荐
数据库备份恢复时,获取oracle表空间脚本,创建用户等
SqlServer表结构转oracle表结构,注释也会一同带上,界面操作可以对表可以单个选择多选查询等操作,C#开发源码见附件
oracle表分区详解
利用DBMS_SPACE包对Oracle 表碎片进行监控与清理,
查询一个Oracle表所占的物理空间大小
oracle表空间信息,查看Oracle表空间空闲与已用大小
oracle表空间创建
ORACLE 对表空间进行的详细操作,经典!
Quartz2.X Oracle 表结构建表语句和字段注释,可用于Quartz的持久化配置
Oracle 表空间建立方法
Oracle 表删除大量数据后,即使表中只有几行记录,但用select count(*) from table 来查询发觉都不会马上出来,原因是该表的空间大了
oracle表空间不足报错的解决 。。。。。。。。。。。。。。。。。。。。。。
oracle创建分区表
ORACLE表空间大小统计语句,比较详细的。。。。
linux系统下创建oracle表空间和用户权限查询,安装Oracle系统时可以用到。
oracle表空间命令语句大全,关于表空间的讲解及关于表空间操作命令的语句。
根据excel快速生成oracle的表结构,内有可运行的代码,支持自由调配
PowerDesigner逆向工程导出Oracle表图
oracle表空间学习整理,包括常用sql
Oracle表删除大量数据(千万)后查询变慢问题(原因分析)