Mysql——索引

索引的类型

  • 按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。
  • 按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引)。
  • 按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引。
  • 按「字段个数」分类:单列索引、联合索引。

Mysql索引底层数据结构

        不同的存储引擎使用不同的数据结构来实现索引。

InnoDB 是 MySQL 默认的存储引擎( 5.5 之后),使用 B+ 树(B+ Tree)来实现其索引。

使用B+树作为索引的好处

        B+ 树的非叶子节点不存放实际的记录数据,仅存放索引,因此数据量相同的情况下,相比存储即存索引又存记录的 B 树,B+树的非叶子节点可以存放更多的索引,因此 B+ 树可以比 B 树更“矮胖”,查询底层节点的磁盘 I/O次数会更少。

        B+ 树通过分裂和合并节点来保持平衡,从而使插入和删除操作在最坏情况下的时间复杂度为 O(log n)。这种平衡机制保证了插入和删除操作的效率都比B树更高,比如删除根节点的时候,不会像 B 树那样会发生复杂的树的变化。

        B+ 树的叶子节点按顺序链接,形成了一个链表结构。这使得范围查询非常高效,因为可以从起始位置遍历到终止位置,无需回溯。Hash 在做等值查询的时候效率贼快,搜索复杂度为 O(1)。但是 Hash 表不适合做范围查询,而 B 树要实现范围查询,只能通过树的遍历来完成范围查询,这会涉及多个节点的磁盘 I/O 操作,范围查询效率也不如 B+ 树。

相关推荐

  1. MySQL索引

    2024-06-06 06:02:04       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 06:02:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 06:02:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 06:02:04       82 阅读
  4. Python语言-面向对象

    2024-06-06 06:02:04       91 阅读

热门阅读

  1. Spring Bean参数校验Validator

    2024-06-06 06:02:04       31 阅读
  2. Apache Calcite - 使用内置函数

    2024-06-06 06:02:04       32 阅读
  3. json.dumps参数

    2024-06-06 06:02:04       31 阅读
  4. ArrayList和LinkedList对比,ArrayList使用注意事项

    2024-06-06 06:02:04       28 阅读
  5. linux中基于docker安装RabbitMQ。

    2024-06-06 06:02:04       30 阅读
  6. 学习笔记 SD卡(1)

    2024-06-06 06:02:04       23 阅读
  7. UOS开通22端口用于SSH

    2024-06-06 06:02:04       27 阅读
  8. 阿里云盘手机批量修改文件名

    2024-06-06 06:02:04       25 阅读
  9. 金色年华里的爱之旅-无忧交友

    2024-06-06 06:02:04       25 阅读
  10. 发布npm自己的插件包

    2024-06-06 06:02:04       29 阅读