浅谈索引

数据库大家都很熟悉,索性的作用也应该知道就是加速查找的速度。

一般情况下,数据库中表的数据是线性的存放在某种数据结构当中的。
如果没有索引的情况下,将遍历的查找数据表,然后直到找到你要的数据为止。

但是为什么索引可以加速查表得速度呢?
如果使用了索引,会将每行的索引列和数据库的物理地址组合成一个最小单元,表中存在几行就生成几个最小单元,然后用B树的数据结构,将最小单元组织起来。
这样,当你使用索引列进行查表时,将不再需要遍历数据表,而是直接查找B树获得该行在系统中的物理地址,直接返回给用户。

索引是不是越多越好呢?
并不是,索引的存在意味着数据库需要为这张表单独的维护一个B树的数据结构。所以增删改的速度会会变慢,如果给不必要的列增加了索引,那么整体的业务速度会因此而变慢。

索引检索是不是一定可以增加查表的速度呢?
并不是。

数据库的底层原理中,只有B树这一种数据结构去实现索引吗?
并不是,数据库还使用bitmap(位图)的方法去实现索引。

举例:如果一张表有10行,然后存在一个性别的列,取值限定为 F(女) 或者M(男) 或者 S(保密)
bitmap将使用三行一行10个位去维护这个表。
第一行使用1去表示女,0去表示不是女。
第二行使用1去表示男,0去表示不是男。
第三行使用1去表示保密,0去表示不是保密

位图使用一个位去表示某种情况,极大的减少的存储密度,
但是位图仅仅在取值非常有限的情况下适用。

那么索引必须用户自行声明吗?
并不是,大部分的数据库都会自动的将主键primary列维护一个索引数据结构。
同时 unique 唯一键也会维护一个索引数据结构。
所以,一旦你声明了一个列是主键或者唯一键,那么数据库底层将自动为之维护一个索引数据结构去加快查表。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值