簇是一个或多个表的组合,这些表的数据存储在相同的数据块中,当通过簇键查询这些
表时,只需读一个数据块就能返回连接的多个表的数据;
关于 hash cluster 和 sorted hash cluster,在 TOM 的那本<Expert Oracle Database
Architecture: 9i and 10g Programming Techniques and Solutions>第 10 章有相当清楚
地讲解。在相同 hash 值对应的块里面,数据行是按指定的列排序存储的。
索引聚簇表是表相关的表共享同一数据块中的相同列, 并把相关数据存储中同一个数据
块上。创建索引聚簇表中最重要的是对 SIZE 参数有很好的估量,否则聚簇将会降低空间利
用,降低效率。
使用索引聚簇表的注意点:
1、如果表中数据有大量 DML 操作的话,那么聚簇将不适用,因为会消极地影响到 DML 性能。
2、聚簇中,全表扫描将受到影响。这是因为将扫描聚簇中不同表的数据,额外增加很多无
用的数据。
3、如果经常 TRUNCATE 表和装载表的话,聚簇将不适用。聚簇中的表无法被 TRUNCATE 的,
这是因为每个块中不只是存储一张表的数据。
SQL> truncate table emp;
ORA-03292: Table to be truncated is part of a cluster
4,如果大部分是读取操作, 且通过聚簇码索引或聚簇表中其他索引来读取的话, 聚簇将会比
较比较适用。
索引聚簇加载数据应该是同时装载同一聚簇码的所有数据,而不是一次装载聚簇中不同
表的数据。这是因为如果一次装载单张表数据的话,很有可能单个码值的数据大于 SIZE 指
定的数据,但是由于聚簇码已经分配完成,此时将会聚簇码块有许多链接块,影响性能。通
过一次装载每个码值对应的数据,可以更好地利用聚簇块的空间。
散列(哈希)聚簇表:概念上同索引聚簇表一样,不同的是用哈希函数代替了索引聚簇
码来进行数据的分配。事实上在散列聚簇中数据就是索引,因为数据决定行的物理位置。散
列聚簇表中 ORACLE 根据行的码值,利用内部函数或提供的函数对聚簇码值进行运算,以决
定数据的物理存储位置。散列聚簇通常意味着如果通过聚码访问的话,一个 IO 就能够提取
到所需的数据。创建散列聚簇时,必须指定散列码值的数目。由于使用哈希函数来确定数据
的分布,对散列聚簇表不能使用范围扫描。全扫描散列聚簇表时,不论表是否为空,ORACLE
将全扫描所有块,这是因为散列聚簇中数据块都是预先分配的。散列聚簇的初始数据装
载将会比较慢。自定义的散列函数限定只能使用表中可用的列和 ORACLE 内置函数。
散列聚簇要点:
1、 散列聚簇通过散列码查询的时候需要的 IO 很少。 几乎一个 IO 就可以提取到所需的数据,
除非发生了行溢出。而传统索
引至少需要 2 个 IO 才能得到数据。
2、散列聚簇查询 CPU 开销大。散列聚簇是 CPU 密集型的,而索引是 IO 密集型的。
3、 对表中数据量比较有把握, 如行数, 每行占用空间, 有合理的上限, 正确设置好 HASHKYES
和 SIZE 参数,那么散列聚簇将比较适用。
4、散列聚簇降低 DML 性能。
5、总是经常通过 HASHKEY 等值访问数据。
http://www.itpub.net/viewthread.php?tid=442689&highlight=Index%2BCluster(需试验)
http://www.itpub.net/viewthread.php?tid=138815&highlight=index%2Bcluster
分享到:
相关推荐
Oracle通过fan-out来决定分区的数量,这由hash_area_size和cluster size(等于db_block_size * hash_multiblock_io_count)决定。fan-out并不是简单地将Build Input大小除以hash_area_size,而是基于内部算法选择...
为了使相关键能映射到同一槽,RedisCluster引入了键哈希标签(Key Hash Tags)的概念。用户可以在键中嵌入特定格式(如`{}`)的标签,仅这部分内容参与哈希计算,确保相同标签的键会被映射到同一槽,从而实现数据的...
在上述示例中,创建了一个名为`credit_cluster`的簇,以信用卡号(`card_no`)和交易日期(`transdate`)作为簇键,其中`transdate`被标记为`sort`以保持其自然顺序。`hashkeys 10000`指定了簇块的最大数量,`hash ...
This uniqueifier is a 4-byte value added as an additional sort key to only the rows that have duplicates of their primary sort key. You can see this extra value if you use DBCC PAGE to look at the ...
本文将详细探讨如何利用排序哈希簇(Sorted Hash Cluster)来实现这一目标。 #### 排序哈希簇的概念与原理 排序哈希簇是Oracle提供的一种数据组织方式,它结合了哈希簇和排序的优点,能够显著提高某些类型查询的...
- **Hash Join**: 当两个表的数据量都比较大时,Oracle 使用哈希算法来创建一个哈希表,然后通过查找哈希表来进行连接。 - **Merge Join**: 这种连接方式要求两个表都被排序过。它通过合并两个已排序的表来实现连接...
2. **哈希(Hash)**:用于存储键值对的集合,适合表示对象。`HSET key field value` 添加字段,`HGET key field` 获取字段值。 3. **列表(List)**:有序的字符串集合,支持通过索引进行插入和获取元素。`LPUSH key ...
例如,通过使用`CREATE CLUSTER`语句创建集群,并通过`HASH IS KEY`指定哈希键,以实现更高效的查询。 综上所述,通过上述四个方面的优化,可以有效提高Oracle数据库的查询性能。需要注意的是,具体的优化措施需要...
### DBA面试知识点详解 ... - 在执行 `ORDER BY`, `GROUP BY`, `DISTINCT`, `UNION`, `CREATE INDEX`, `INDEX REBUILD`, `MINUS` 等操作时,如果 PGA 或 `SORT_AREA_SIZE` 不足,排序将在临时表空间中进行。
在 Oracle 中,表连接方式有多种,包括 Hash Join、Merge Join、Nest Loop(Cluster Join)和 Index Join。每种连接方式都有其特点和应用场景,了解这些连接方式可以帮助 DBA 选择合适的连接方式来提高查询性能。 ...
1. 表连接方式:Hash Join、Merge Join、Nest Loop(Cluster Join)、Index Join等。Hash Join是基于哈希函数将两个表连接,Merge Join是基于排序的连接方式,Nest Loop是基于嵌套循环的连接方式,Index Join是基于...
- **Hash Join**: 当两个表中都有大量数据时,通常会选择哈希连接。它通过创建一个哈希表来实现连接操作,适用于大数据量且列值分布均匀的情况。 - **Merge Join**: 这种连接方式要求被连接的列已经排序或可以被排序...
| 3 | Single row by hash cluster key with unique or primary key | | 4 | Single row by unique or primary key | | 5 | Cluster join | | 6 | Hash cluster key | | 7 | Indexed cluster key | | 8 | Composite ...
1. **Hash Join**:当两个表进行连接时,Oracle会通过创建一个散列表来加速连接操作。这种方式特别适用于大数据量的连接操作。 2. **Merge Join**:这种连接方式通过排序两个表的连接列来进行连接。它适合于两个已经...
In this version I have done away with the b+tree and hash index in favor of my own MGIndex structure which for all intents and purposes is superior and the performance numbers speak for themselves....
14. **SORT**: 对列表、集合或有序集合进行排序,`SORT list [by pattern] [limit offset count] [get pattern*] [asc|desc] [alpha]`。 15. **BLPOP/BRPOP**: 阻塞式列表弹出,从列表左端或右端取出元素,当列表为...
§3.4.29 分类区的大小(SORT_AREA_SIZE) 79 §3.4.30 用户卸出文件的路径(USER_DUMP_DEST) 79 §3.5 SQL脚本文件 79 §3.5.1 建立数据字典的脚本 79 §3.5.2 建立附加的数据字典 80 §3.5.3 带“NO”的脚本 81 §...
1. **表连接方式**:SQL中的表连接主要有四种类型:哈希连接(Hash Join)、归并连接(Merge Join)、嵌套循环连接(Nest Loop,也称为Cluster Join)和索引连接(Index Join)。每种连接方式都有其适用场景,DBA...
3.2.1.5 哈希聚簇读取(hash cluster access)139 3.2.1.6 采样表扫描(sample table scan)140 3.2.2 表连接的执行计划143 3.2.2.1 嵌套循环连接(nested loops join)143 3.2.2.2 排序合并连接(sort merge join)146 3.2....