图解:什么是索引?

1.磁盘

【图解】

以一个拥有3个磁道和4个扇区的磁盘为例
image

2.数据表与磁盘

【图解】

以一个简单的用户表user_table为例,总共存储100行数据
image

  • 每一个Block可以存储4行数据,那么该表需要占用25块磁盘;
  • 那么如果在该表中查询数据,最坏情况下据需要查询25块磁盘才能查到;
  • 需要注意的是,磁盘中的数据是无法直接处理的,需要读取到内存中处理,处理完成后再返回磁盘,即一次IO,那么在该表中查询,最坏的情况就是需要25次IO;

3.何为索引?

【图解】

数据表index_table中只存储两列数据:id和地址指针,地址指针指向的是每行数据在磁盘中的位置
image

  • 该数据表一行假设为16Byte,那么一Block可以存储32行,整个表占用4块(Block);
  • 那么如果使用该数据表辅助查询,最坏情况需要查询4+1=5块(Block),即5次IO;
  • 相比较“没有该数据表辅助”的情况,效率大大提升,而该数据表就是所谓的“索引”

4.稀疏索引

【问题】

但是上述方案并不足够好,如果用户表user_table中的数据不是100,而是1000的话,那么索引表index_table同样需要增加到1000,占用磁盘Block数为 1000/32 ≈ 31.3,向上取整32块(Block),那么最坏情况需要查询 32+1 = 33次,效率仍然不是很高。

【解决方案】

稀疏索引

【图解】

稀疏索引,也称作多级索引,在一级索引的基础之上,再加一层索引,但是稀疏索引不再是一一映射,而是一对多,即一行数据,映射一组数据(实际上就是一行数据中记录一组数据的最大值所在的位置)
image

  • 稀疏索引假设一行为16Byte,那么一Block可以存储32行,整个表占用1块(Block);
  • 所以最坏查询 1+1+1 = 3块(Block),即3次IO,这样效率就快得多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值