数据库-索引分类

一. 按存储的物理结构划分

  1. 稠密索引:对于某一属性,主文件的所有记录(形成的索引字段值)都有一个索引项对应。

  2. 稀疏索引:对应某一属性,部分记录有索引项对应:把所有记录按索引域的值分组,每组一个索引项。

  3. 聚集索引:记录在数据文件中的物理顺序与在索引文件中的顺序相同。数据文件和索引文件都按索引域排序。(即建立在数据文件的排序字段)。索引项:<索引域值,包含该索引值的所有连续磁盘块的第一个磁盘块的地址>。一个数据文件只能有一个聚集索引。可以稀疏也可以稠密,一般对索引字段的每一个不同值有一个索引项。

  4. 非聚集索引(辅助索引):顺序不同。索引建立在数据文件的非排序字段,但该索引文件有序。索引项:<索引域值,磁盘块地址的指针>。一个数据文件可以有多个非聚集索引。一般是稠密索引。

  5. 主索引:稀疏索引,每个索引项对应一个磁盘块(数据文件和索引文件按键值排序)。索引项:<每个数据文件块的最小键值,存储记录的磁盘块的指针>。

二. 按数据结构划分

  1. B树:通常意味数据有序存储。
    存储结构:
    内节点的存储结构:树指针,<索引值,主键 ? 数据指针 : 对应数据记录所在磁盘块链表>
    叶子节点:树指针为空,其他相同。

  2. B+树:内节点只存储键值,叶节点结构为<键值,含该键值的数据记录的磁盘块地址,下一个叶节点指针>。(B+树也可不作为索引,而是作为一个文件中的记录组织者,此时data不存储记录的地址,直接存储记录本身。)

遵循最左前缀匹配原则:如果是联合索引,遇到范围查询(>, <, between, like)会停止后面列的匹配。(a, b)首先列a有顺序的匹配,b无顺序,a等值时,b才有顺序。

三. B树与B+树比较

  1. B树内节点也存储数据,查到就可以直接返回,查询性能不稳定。B+树所有数据都在叶节点,查询性能稳定。同样高度,B树查询效率更高。
  2. B树每个节点(理解为一个数据页)都要存储键值和数据,而B+树非叶节点只存储键值,所以同一页中B+树可存储的数据(索引到的数据)更多。同样的数据量,B树的查询磁盘I/O次数更多,影响效率。
  3. B+树叶子节点形成了有序链表,便于查找。

查询复杂度分析:

  1. B树:一个节点大小为一页,只需要一次磁盘I/O就可以完全载入。因此树高为h时,由于根节点常驻内存,因此最多需要查询(h-1)次,时间复杂度为log(mN)(m是底数,表示树的阶)。
  2. B+树:由上述可见,m越大效率越高,由于每个节点大小固定为一页,B+树的非叶节点中只存储键值,所以m更大,查询效率更高。(m不能过大,会变成近似于线性遍历)

四. InnoDB使用B+树作为索引

  1. InnoDB表数据文件本身就是B+树组织的索引结构(主索引),key是主键,data存储完整的数据记录。(因此建议使用自增的字段作为主键,避免存储引擎为维持B+树的特性而频繁调整)
  2. InnoDB辅助索引文件的data存储对应记录的主键的值而非记录地址(因此不建议使用过长的字段作为主键,会导致辅助索引文件过大),是二级索引。根据辅助索引查到主键,再查主索引。
  3. InnoDB插入新数据过程
    3.1 若原来的页A满了,则创建新的页B和C,将页A中的数据复制到B中,C中存储新插入的数据,而页A只存储键值,页B和C是A的两个子节点。(由于根节点常驻内存,所以不改动A的物理位置,而是把其内容复制到新的页)
    3.2 插入数据时都会往新创建的页里存储,直到写满再继续创建新的页,因此建议主键自增,这样不会影响到原来的页,插入效率高。

参考:
https://database.51cto.com/art/201907/598949.htm
《高性能MySQL》

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库索引是一种特殊的数据结构,它可以帮助数据库系统快速查找和访问数据。在数据库中,索引通常被用来加速查询语句的执行速度。常见的数据库索引类型包括: 1. B-Tree索引:B-Tree索引是一种基于树结构实现的索引方式,它能够快速地定位到需要查找的数据。B-Tree索引在大部分场景下都能够提供高效的查询性能,适合于处理大量的随机访问和范围访问。 2. Hash索引:Hash索引是一种基于哈希表实现的索引方式,它能够快速地定位到需要查找的数据。Hash索引通常用于处理精确匹配的查找,例如等值查询。但是,Hash索引不适合处理范围查询和模糊查询等操作。 3. Full-Text索引:Full-Text索引是一种针对文本内容进行全文检索的索引方式,它能够快速地查找包含指定关键词的文本内容。Full-Text索引通常用于处理文本搜索和信息检索等场景。 4. R-Tree索引:R-Tree索引是一种基于树结构实现的空间索引方式,它能够快速地查找包含指定空间范围的数据。R-Tree索引通常用于处理地理信息和空间数据等场景。 5. Bitmap索引:Bitmap索引是一种基于位图实现的索引方式,它能够快速地定位到需要查找的数据。Bitmap索引通常用于处理低基数列(即列值相对较少)的等值查询,例如性别、婚姻状况等。 以上是常见的数据库索引类型,不同的索引类型适用于不同的数据访问模式和场景,开发者需要根据实际需求进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值