聚簇表
来源:互联网 发布:c语言联合体 编辑:程序博客网 时间:2024/05/23 19:51
第一部分
聚簇表,简单来说就是利用选取一个或多个列作为cluster key,具有相同cluster key的一个或多个表的数据行会被保留在同一个数据块中。
适用条件:对于经常需要进行连接操作而又不会经常被更新的几个表,可以考虑建立对这几个表建立聚簇表。
不太适合的条件:
1、经常被更新的表。跟堆表相比,聚簇表的插入操作的时候,在插入前需要查找cluster key以定位插入的位置;对于更新操作,若更新值为cluster key,则意味着对应更新数据行ROWID的修改。
2、经常需要进行full table scan的表
3、需要被truncate的表。进行该操作的时候,相当于DELETE聚簇表中的对应数据行。该操作的实施,跟用聚簇表来减少连接操作所带来的I/O消耗的初衷有违。
优点:减少经常性连接操作所带来的disk I/O,加快语句执行时间。同时由于cluster key不需要重复存储,在一定程度上降低了存储空间。
第二部分:Indexed cluster和hash cluster
一、Indexed cluster
所谓indexed cluster是指在cluster key上建有索引的聚簇表。cluster index是建立在cluster key上的一个B-tree树。该索引必须在任何数据行被插入到聚簇表之前被创建。如下图:
二、hash cluster
所谓hash cluster是指使用hash函数来定位读取数据的一种聚簇表。
原理:设置一个hash函数,使得每一个聚簇键通过这个hash函数都映射到一个hash value,通过这个hash value可以找到对应的数据块。
注意:在创建cluster的时候设置hash的相关情况,有以下三个比较密切相关的设置:
HASHKEYS:指定hash键值的个数,实际上通常是比指定值大的素数。如cluster key的基数为100,则实际的hash键值个数为101;
HASH IS expresson:指定hash函数,默认为DBMS所提供的HASH函数。选择HASH函数的时候,应该充分考虑到cluster key键值的分布。如果多个具有不同聚簇值的行指向同一个hash value,也就是出现hash collision,则很容易出现溢出的问题(当数据块满了之后,插入到一个新的数据块中),这会使得聚簇因子变坏。如下图:
size n:指定单位聚簇的大小,这个可以根据每个cluster key平均对应多少的数据行,以及每一个数据行的平均长度来大概确定。同时为了避免溢出的出现,会预留一定的空间,如一个数据块中有两个HASH键,则预留15%的空间,三个HASH键则预留12%,四个则预留8%的空间,大于四个则直接计算。如果SIZE的设定值的大小大于一个数据块的大小,则默认使用OS的数据块。一般默认大小为数据库的数据块。
三:single table cluster
single table cluster是指一个聚簇只是对应一个表。其在indexed cluster和hash cluster中都有,只要在定义聚簇的时候,加single table就行了。不同于普通的索引,其在大数据量的范围查找中具有很大的性能优势。
---------------------------------------------------------------------------------------------------
如有错误,欢迎指正
技术交流QQ:1732035211
技术交流邮箱:1732035211@qq.com
新浪微博:数据库小菜鸟http://weibo.com/u/3132578390
- 聚簇表
- 聚簇表
- 聚簇表
- 聚簇表
- 聚簇表
- Oracle聚簇表
- oracle 聚簇表
- oracle聚簇表
- Oracle的聚簇表
- Oracle聚簇表使用指南
- oracle cluster tables 聚簇表
- Oracler中的聚簇表
- Oracle聚簇表使用方针
- oracle 索引组织表,索引聚簇表等
- 索引聚簇表ICT测试(Index Cluster Table)
- oracle 索引聚簇表的工作原理
- 分区表和聚簇表的一点看法
- oracle 索引聚簇表的工作原理
- 关闭休眠扩大c盘空间
- android输入
- 二维码生成与解析代码实现
- Oracle 10g如何实现 wm_concat函数(转)
- C++ 小心你的析构函数不会执行
- 聚簇表
- IOS开发(23)之UITableView控件
- 黑马程序员——JAVA学习日志1
- android 集成第三方静态库的编译方法
- poj 1703 Find them, Catch them
- Poco::Base64Encoder,Poco::Base64Decoder
- osx 配置 Apache+Mysql+Php
- FFmpeg 移植 Android
- 对象的引用