索引

引文

相信大家都用过数组,数组的特点是查询速度快,而插入和删除速度慢。插入和删除速度慢很容易理解,就是如果在数组中间插入或删除一个元素,后面的元素都要进行移动,时间复杂度是O(n)。而查询速度快是因为数组是根据索引来查询的,时间复杂度是O(1)。那为什么用索引来查就能做到这么快呢?先来看一下下面这张图:

以Java为例,这里是一个int类型的数组{4,7,2,9,1,3},已经知道数组的起始地址为 0x1000 ,如果要查询第3个元素的值要怎么查呢(从0开始)。

假如数组没有索引,那就只能通过遍历的方式来找了。这样时间复杂度就是O(n), 这种就是链表的查询方式。但是对于数组来说,它的元素内存是连续的,而且数据类型相同(占的空间相同),所以只要知道第0个元素的位置,就能算出后面连续的元素。

所以现在要找第三个元素的值,就能直接根据索引来计算它的位置:

      address = address_start + data_size * index 

即  address = 0x1000 + 4 * 3 = 0x100C

这样就能马上知道第三个元素的位置在内存地址为0x100C的位置, 这样的时间复杂度为O(1)。

 

看完这个例子后,是否对索引是什么和他的作用有所了解了呢。其实索引不一定是这样顺序结构的,也有一些树状结构的和哈希结构的。于索引使用的比较多的是数据库。以MySQL为例,索引的数据结构有一下几种:

1. B+树索引

2. hash索引

3. FULLTEXT索引

4. R-Tree索引

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值