有M个桶,每个桶是有相同容量的存储地(可以是内存页,也可以是磁盘块)
散列函数 h(k),可以将键值k映射到 {0,1,…,M-1}中的某一个值
将具有键值k的记录Record(k)存储在对应h(k)编号的桶中
内存数据可采用散列确定存储页, 主文件可采用散列确定存储块, 索引亦可采用散列确定索引项的存储块
M个桶。 一个桶可以是一个存储块,亦可是若干个连续的存储块。
eg:假设 1存储块可存放2个键值及其指针,M=4;1个桶为1个存储块
h(x)满足:
h(e)=0; h(b)=h(f)=h(s)=1
h(g)=2; h(a)=h©=3
问:如何查询键值 a的索引项?
计算 h(a)=3
读取 3号桶,获得键值a的索引项.
需要1个磁盘块读取
问:如何插入键值d的索引项?
计算h(d)=2
如2号桶有空间,则将索引项d插入2号桶中
问:如何插入键值s的索引项?
计算 h(s)=1
1号桶无空间,则申请一溢出桶,插入s
如何删除键值f.
计算h(f)=1
删除1号桶中的键值f
将溢出桶中的s合并到主桶中,删除溢出桶
散列索引的目标:
均匀分布如何做到?
桶的数目M如何确定?
桶的数目M是固定值----静态散列索引
桶的数目随键值增多,动态增加----动态散列索引
可扩展散列索引解决动态散列索引