数据库 05-03 多码访问 ,位图索引 和 散列(哈希)

01.多码访问
在这里插入图片描述
一.多个单码查询交集在这里插入图片描述在这里插入图片描述
二.复合搜索码
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

这里用到了上面的B+树的范围查找
在这里插入图片描述

02.位图索引

位图定义:
在这里插入图片描述
在这里插入图片描述
位图索引结构:就是一组二进制的字符,每一个元素表示这个属性的一种值,每一个元素的信息要从左往右开始看,
在这里插入图片描述

在这里插入图片描述
位图对于多码查找有交作用
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

效率判断:
在这里插入图片描述
另一个作用:用于计算
在这里插入图片描述

高效使用:
用计算机and命令
在这里插入图片描述
在这里插入图片描述
where语句中有or条件时候,用or命令,并运算
在这里插入图片描述
where语句中有not条件,用补码

所谓断言就是一个谓词,它表达了我们希望数据库总能满足的一个条件。域约束和参照完整性约束是断言的特殊形式。

SQL-92中断言的定义形式
  create assertion <断言名> check <谓词>
例如,在银行企业数据库中规定:每个分支机构的贷款金额的总和必须少于该支行帐户余额的总和。用断言描述如下:

create assertion sum-constraint check
 (not exists (select * from branch
  where (select sum(amount) from loan
     where loan.branch-name = branch.branch-name)
    >= (select sum(balance) from account
      where account.branch-name = branch.branch-name)
         )
  )

在这里插入图片描述
SQL中的索引
在这里插入图片描述
在这里插入图片描述

03.散列
一.在这里插入图片描述
放记录的地方:
在这里插入图片描述
散列函数:
在这里插入图片描述
查找的过程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
散列应用的场景在这里插入图片描述

理想的散列函数:
在这里插入图片描述

在这里插入图片描述
例子1:
在这里插入图片描述
例子2:
在这里插入图片描述
这两个例子都不是很好

例子3:
在这里插入图片描述
在这里插入图片描述
例子:
在这里插入图片描述
s【0】是一个字节,用asc码
在这里插入图片描述
桶溢出:
在这里插入图片描述
方法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
闭地址可以添加溢出桶,桶的地址是固定的,但是数量可以改变,多用于数据库

开地址:和线性探查法有关,当一个桶满了,会在附近找有空间的桶,桶数量是不变的
在这里插入图片描述
在这里插入图片描述

散列索引:
在这里插入图片描述
在这里插入图片描述
用处:
在这里插入图片描述
二.动态散列,只是改变了散列函数在这里插入图片描述

可扩展散列在这里插入图片描述在这里插入图片描述
在这里插入图片描述
这里的i表示的是前i位

在这里插入图片描述
例子:Suppose that we are using extendable hashing on a file that contains records with the following search-key values:24, 29, 2, 17,5, 19,3, 18, 7, 11, 37,15,23, 31。
Show the extendable hash structure for this file if the hash function is h(x) = x mod 16 and buckets can hold three records.
分析:题目中告知桶可存键值的大小为3,散列函数h(x)=x mod 16,16=2^4,即k=4(可变桶的最大位数)。
操作:求所有键值的二进制码。
24(11000),29(11101),2(10),17(10001),5(101),19(10011),3(11),18(10010),7(111),11(1011),37(100101),15(1111),23(10111),31(11111)。
根据以上二进制码,大家可以看到二进制码的长度不一致,所以以最大长度为准。
24(011000),29(011101),2(000010),17(010001),5(000101),19(010011),3(000011),18(00010),7(000111),11(001011),37(100101),15(001111),23(010111),31(011111)。
此时进行存储:i=1,每次存储时,都观察二进制的前i位,按照顺序依次插入二进制码,具体如下图
在这里插入图片描述
因为题目中告知桶的大小为3,所以当一个存储块中存够3个键值之后,如果还需存入数据,则需进行扩展散列桶,此时i=2;具体如下图:
在这里插入图片描述
如上图,接下来需在01对应的桶中插入19(010011),所以进行扩展散列桶,此时i=3,又因为00对应的桶中并没有存满,所以00桶对应的
存储块上标不变。具体如下图:
在这里插入图片描述
后续的操作便如上述插入进行操作即可,我就不在这里赘述了,相信各位聪明的宝宝已经学会了如何操作

例子中的是i从1开始的,但是一般是从0开始的

例子:
在这里插入图片描述
在这里插入图片描述
最开始的两条,不用前i位,i=0
在这里插入图片描述

在这里插入图片描述
第三个记录,此时桶满了,就会扩展,要用到i位
i=1
2的一次方 = 2 这代表 桶地址表有两项
分别是 0 ,1

扩展的桶的i标志位修改为1

在这里插入图片描述
第四条记录
在这里插入图片描述

那个桶扩展,那个桶标志位i改变,在原有的地址上扩展,原来的桶代表的意义不变

由于扩容,i=2,有四个桶地址项

最开始的桶表示前缀0,因此 00,01 都指向

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值