1. 首页
  2. IT资讯

用hash cluster表提高查询性能 (一)

cluster可以把一个或者多个表的数据按照键值聚合在一起,在很多应用场景能提高查询性能。cluster可以为B*Tree cluster也可以是hash cluster,这篇文章主要讨论hash cluster。[@more@]一、hash cluster重要参数与传统的表不同,cluster在创建的时候就要定好大小,预先分配空间,这个步骤至关重要。如果空间分配过大,则会导致空间浪费,如果过小,会导致块溢出(同一个hash key分布在不同的block中),从而导致IO增大。那么,如何合理设定空间呢?这就需要合理设定hashkeys和size两个参数了。hashkeys: cluster预期的唯一键值的数量(count(distinct hash_key))size: 平均每个唯一键值的大小。假设一个键值对应10行,每行大小为100字节,则size = 10*100=1000hash cluster在初始化分配空间的时候,分配空间的大小的计算公式是:hashkeys * trunc(block_size/size)下面通过一个实例来说明如何计算hashkeys和size的大小:1) 得到行数、平均行长、数据块数量SQL> select num_rows,AVG_ROW_LEN,blocks from dba_tables where table_name=’USERS’; NUM_ROWS AVG_ROW_LEN BLOCKS———- ———– ———-1305646540 42 43476422) 得到有多少个不同的名字个数,这个相当于hashkeysSQL> select count(distinct name) cnt from USERS; CNT———————– 100872483 3) 计算cluster的size参数–计算方法是:size=(平均行长)*(每一个hash key平均对应的个数)–在这里有13亿数据,有1亿不同的值,所以每一个key对应的记录为1305646540/100872483=13 – SQL> select 42*(1305646540/100872483) “SIZE” from dual; SIZE ————————- 543.628481–计算时用的平均行长应稍大于实际平均行长–如果hash key值在表中是唯一的,则size就简单了,稍大于平均行长即可4) 语句以上的信息,最后cluster可以这样设置:–实际的size参数应该稍大于计算出来的值–如果确定以后数据不再改变,则可设置成与计算值一样大小SQL> create cluster hash_cluster (hash_key number(38)) 2 pctfree 0 3 hashkeys 100972483 4 size 600 5 single table 6 hash is hash_key;–用散列键作为散列函数 以上方法是基于现有数据进行的,如果没有数据,可以通过模拟数据或者估算,然后用同样的方式推算得出。对于普通的hash cluster,因为涉及到几个表,在计算hashkeys和size时要把几个表都考虑进去。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/231499/viewspace-1040415/,如需转载,请注明出处,否则将追究法律责任。

主题测试文章,只做测试使用。发布者:布吉卡,转转请注明出处:http://www.cxybcw.com/195649.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code