|
|
原帖由 foreverlee 于 2008-3-21 16:25 发表 ![]()
2 如果Oracle 取mod()类似的可循环性函数作为hash function做 rows与hash buckets的对应关系
那么 每个hash bucket得到的row数量应该是相等的
但这里可以发现很不均匀.
Number of buckets with 0 rows: 2625
Number of buckets with 1 rows: 1152
Number of buckets with 2 rows: 260
Number of buckets with 3 rows: 51
Number of buckets with 4 rows: 8
所以我觉得Oracle的Hash Function不能单单用
select count(*),col1_name,col2_name,...colN_name from build_table
group by col1_name,col2_name....colN_name去准确描述. 但如果只是找规律 应该可以采用.
用mod()之类的函数生成hash值只是在理论上(或者说总的概率上)每个bucket的row数量相等,
但实际情况还是要看hash key值的具体分布情况,
举个例子:
假设oracle的hash function是对10取余:mod(x,10)
对下列数据做散列,
1,
11,
21,
31,
41,
51,
61
你会发现即便每个数据都是唯一值,结果这些数最后都装到一个bucket里了。
这个问题要好好研究下。 |
|