数据库(索引与散列)

索引的基本类型:

  • 顺序索引
    基于值的顺序排序
  • 散列索引
    基于值平均分布到若干散列桶中。一个值所属的散列通由一个函数决定,这个函数叫做散列函数。

搜索码:用于在文件中查找记录的属性或属性集称为搜索码

顺序索引

顺序索引按顺序存储搜索码的值,比如在user表中,以userId为索引,那这个同时也是搜索码,顺序索引就是把这个搜索码按从小到大或从大到小排序,并将搜索码和记录关联。
如果包含记录的文件按照某个搜索码按指定的顺序排序,也就是说除了搜索码,记录也是按序存储的,那么改搜索码对应的索引称为聚集索引,也叫做主索引
如果搜索码指定的顺序和记录的顺序不同则叫做非聚集索引,也叫做辅助索引

稠密索引 和 稀疏索引

稠密索引的每个搜索码值都有一个索引项。对每一个搜索码的值,可能对应1或多个索引项的值,如果是聚集索引,那就是一对一,比如,有以下包含记录的文件:

1001小红
1002小橙
1002小黄
1002小绿
1002小青
1003小蓝
1004小紫

那么假设对于 搜索码值1002来说,稠密索引文件中只要将1002和小橙记录对应起来就行了,因为是聚集索引,其余userId为1002的记录按物理顺序排在之后,可以访问到。
但是在非聚集索引中,稠密索引文件中需要将1002和他的所有的记录对应起来,因为是非聚集索引,记录的物理顺序是无序的,所有单一条是找不到的。

稀疏索引只为某些搜索码值建立索引项,假如,只为1001、1003建立索引,那么在查询userId为1002的记录时,先在索引文件中匹配搜索码,1001,小了,1003,大了。得出1002这个搜索码值,在顺序索引这两项索引项的中间。
那么因为已经为1001和1003建立了索引项,所以只要找到1001对应的第一条记录小红,和1003对应的第一条记录小蓝,得出,我们要找的记录一定在这个之间,扫描这个区间即可。

但是上面斜体这样的说法是有漏洞的,没有建立在聚集索引的前提下,即搜索码值的顺序不能保证文件中记录的顺序一致,所以稀疏索引的适用范围是聚集索引。

多级索引

具体结构如下:

随着数据表数据量的增多,索引文件逐渐增大,查询效率会收到影响,如果要提升效率,可以在主内存中放一块一级索引(空间占用小),根据这个一级索引去硬盘中找对应的二级索引,这样效率会高很多。

辅助索引

书上有句话:辅助索引必须是稠密索引。
其实和上面的稀疏索引的适用范围是聚集索引一个道理…
假如我要查某条记录,它的搜索码值不存在与索引文件中,那我就无法定位到某个物理块上记录,因为记录是无序的。
进一步,辅助索引必须包含指向每一条记录的指针。因为索引只须包含第一条记录的指针这个说法成立的前提就是记录按这个搜索码顺序存储,现在记录是无序的,仅按照第一条记录是找不到的。

非顺序索引——B+树索引文件

二叉搜索树、平衡树、红黑树、B-树、B+树

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值