哈希聚簇读取(Hash Cluster Access)[摘]

哈希聚簇是一种通过哈希值实现数据聚簇的方法,减少一次I/O,提高对分散表的读取效率。适用于数据量大、随机读取频繁的场景,但不适合数据量经常增加的情况。创建时需合理设置哈希键和存储空间,以避免聚簇因子恶化影响性能。
摘要由CSDN通过智能技术生成
 

          聚簇是通过提高聚簇因子来提高物理I/O效率的有效方法,而哈希聚簇则是通过使用哈希函数所产生的哈希值来实现聚簇的一种类型,即具有相同哈希值的数据被存储在相同的数据块中以便提高聚簇因子。

         利用索引从表中读取数据的方式必须要经历两个I/O,即索引I/O和表I/O。但是哈希聚簇的数据读取方式却有所不同,其不同之处在于哈希聚簇是通过哈希函数所产生的哈希值和表I/O来读取数据,此过程减少了一次I/O。因此,可以通过减少I/O来提高从数据分布比较分散的表中读取数据的效率。

         在从数据量比较少的表中读取数据时,由于在内存中查找到所需数据块的命中率比较高,所以使用唯一索引扫描的方式来进行扫描比较有利。但是对于命中率比较低的海量表而言,使用哈希聚簇的方式来读取数据时,可以减少大约30%左右的随机读取量。

         在创建哈希聚簇时,已经通过设置参数 HASHKEYS*SIZE指定了其最初的存储空间。而在创建一般表时并没有预先制定其存储空间,其存储空间会随着数据量的增加而增加。由于在创建哈希聚簇时其存储空间就已经被指定,所以它并不会随着数据量的增加而增加。由此可见,哈希聚簇并不适合数据量经常增加的情况。

       哈希值的个数同样也是在创建哈希聚簇时通过设置参数HASHKEYS来决定的,哈希值的个数是大于该参数值的最小质数。创建哈希聚簇时,最初为哈希值所分配的数据块称为根块。随着具有相同哈希值的行被不断插入,而当具有相同哈希值的数据行无法被继续存储在最初所分配的数据块时,就需要使用溢出区(OverFlow Area)来存储多出来的数据。

         哈希键值设置不够合理就容易使不同的值拥有相同的哈希值,这样一来溢出的数据块就变得更多了。如果经常出现这种现象,那么就容易使聚簇因子变坏从而影响执行速度,在这种情况下就有必要对表进行重构。

         尽量避免把变更频繁的列指定为哈希键列,也不要为数据大量增加的表创建哈希聚簇。在哈希聚簇化的表中仍然可以使用一般索引。

         在行的长度偏差并不严重且能够预测的表中,若需要频繁地按照随机方式从中读取数据,那么为其创建哈希聚簇将能够很大程度上提高读取效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值