索引的概念和优点

概念:
索引存储在内存中,为服务器存储引擎为了快速找到记录的一种数据结构。索引的主要
作用是加快数据查找速度,提高数据库的性能。
优点:
(1) 创建唯一性索引,保证数据库表中每一行数据的唯一性
(2) 大大加快数据的检索速度,这也是创建索引的最主要的原因
(3) 加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
(4) 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间

索引的分类

(1) 普通索引:最基本的索引,它没有任何限制。

(2) 唯一索引:与普通索引类似,不同的就是索引列的值必须唯一,但允许有
空值。如果是组合索引,则列值的组合必须唯一。
(3) 主键索引:它是一种特殊的唯一索引,用于唯一标识数据表中的某一条记
录,不允许有空值,一般用 primary key 来约束。
(4) 联合索引(又叫复合索引):多个字段上建立的索引,能够加速复合查询
条件的检索。
(5) 全文索引:老版本 MySQL 自带的全文索引只能用于数据库引擎为
MyISAM 的数据表,新版本 MySQL 5.6 的 InnoDB 支持全文索引。默认 MySQL
不支持中文全文检索,可以通过扩展 MySQL,添加中文全文检索或为中文内容表提供
一个对应的英文索引表的方式来支持中文。

索引的底层实现原理

1. 索引结构

索引是在 Mysql 的存储引擎(InnoDB,MyISAM)层中实现的, 而不是在服务层实现
的. 所以每种存储引擎的索引都不一定完全相同, 也不是所有的存储引擎都支持所有的索引
类型的, Mysql 目前提供了以下 4 种索引:
B+Tree 索引: 最常见的索引类型, 大部分索引都支持 B+树索引. Hash 索引: 只有 Memory 引擎支持, 使用场景简单. R-Tree 索引(空间索引): 空间索引是 MyISAM 引擎的一个特殊索引类型, 主要地理
空间数据, 使用也很少. S-Full-text(全文索引): 全文索引也是 MyISAM 的一个特殊索引类型, 主要用于全
文索引, InnoDB 从 Mysql5.6 

2. BTree 结构

B+Tree 是在 BTree 基础上进行演变的, 所以我们先来看看 BTree, BTree 又叫多路

平衡搜索树, 一颗 m 叉 BTree 特性如下

(1) 树中每个节点最多包含 m 个孩子.

(2) 除根节点与叶子节点外, 每个节点至少有[ceil(m/2)] 个孩子(ceil 函数指向上取整).

(3) 若根节点不是叶子节点, 则至少有两个孩子.

(4) 每个非叶子节点由 n 个 Key 和 n+1 个指针组成, 其中 [ceil(m/2) -1 ] <= n <= m-1. 以 5 叉 BTree 为例, key 的数量: 公式推导 [ceil(m/2) -1 ] <= n <= m-1. 所以 2 <= n <= 4, 中间节点分裂父节点,两边节点分裂

3.B+Tree 结构

B+Tree 为 BTree 的变种, B+Tree 与 BTree 的区别:

1.B+Tree 的叶子节点保存所有的 key 信息, 依 key 大小顺序排列.

2.B+Tree 叶子节点元素维护了一个单项链表. 所有的非叶子节点都可以看作是 key 的索引部分

B+Tree 查询效率更稳定. Mysql 中的 B+Tree

MySql 索引数据结构对经典的 B+Tree 进行了优化, 在原 B+Tree 的基础上, 增加

了一个指向相邻叶子节点的链表指针, 就形成了带有顺序指针的 B+Tree, 提高区间访问的

性能

MySql 中的 B+Tree 索引结构示意图:

数据库索引和索引底层实现原理相关推荐

  1. MySql数据库事务隔离级别底层实现原理总结

    一:隔离级别 众所周知,事务的隔离级别有四个等级,分别是读未提交(RU),读已提交(RC),可重复读(RR)与串行化(Serial),通过设置隔离级别,可以解决事务并发过程中导致的脏读,不可重复读与幻 ...

  2. 数据库两大必备神器:索引和锁底层原理是什么!

    git:https://github.com/singgel?tab=repositories 一.索引 在之前,我对索引有以下的认知: 索引可以加快数据库的检索速度: 表经常进行INSERT/UPD ...

  3. MySQL索引底层实现原理 MyISAM非聚簇索引 vs. InnoDB聚簇索引

    MySQL索引底层实现原理 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 我们知道,数据库查询是数据库的 ...

  4. MySQL索引底层数据结构原理剖析

    一. 前言 1. 说明 我们平时所说的:聚集索引(主键索引),次要索引,覆盖索引,复合索引,前缀索引,唯一索引在MySQL5.7和 8.0版本默认都是使用B+Tree索引,除此之外还有 Hash索引. ...

  5. 【MySQL索引】底层实现原理 MyISAM非聚簇索引 vs. InnoDB聚簇索引

    MySQL索引底层实现原理 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 我们知道,数据库查询是数据库的 ...

  6. mysql数据库算法_数据库:MySQL索引背后的数据结构及算法原理【转】

    原文:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话 ...

  7. 数据库中的索引原理阅读

    数据库中的索引原理阅读: 实际上,您可以把索引理解为一种特殊的目录.微软的SQLSERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclu ...

  8. 聚集索引和非聚集索引的区别底层_数据库-索引相关

    一.什么是索引 在数据库中,索引的含义与日常意义上的"索引"一词并无多大区别(想想小时候查字典),它是用于提高数据库表数据访问速度的数据库对象. 总而言之,索引是一个排序的列表,在 ...

  9. MySQL数据库篇之索引原理与慢查询优化之一

    主要内容: 一.索引的介绍 二.索引的原理 三.索引的数据结构 四.聚集索引与辅助索引 五.MySQL索引管理 六.测试索引 七.正确使用索引 八.联合索引与覆盖索引 九.查询优化神器--explai ...

最新文章

  1. Python切分图像小案例(1、3、2、4象限子图互换)
  2. RabbitMQ 3.6 安装
  3. SQL Server学习1(建数据库,建表,建约束)
  4. php trace 图形,trace工具定位php性能问题
  5. servlet的注解开发
  6. 百度地图之添加覆盖物
  7. 企业类库 add access 2007
  8. 计算机视觉 AI 工具集 OpenVINO™,是你心目中的深度学习框架 Top1 吗?
  9. 【收藏】一千行 MySQL 学习笔记
  10. Ubuntu14.04创建WiFi热点
  11. 2018.8.25CCPC网络赛Find Integer题解(费马大定理+勾股数的求解)
  12. 马哥python开发培训
  13. 接口性能测试案例分析
  14. 阿里 酷家乐:实习生面试
  15. 中国月度、年度NDVI/植被覆盖空间分布数据分享(1986-2021)
  16. ShaRF: Shape-conditioned Radiance Fields from a Single View
  17. 第一届安洵杯writeup
  18. 戴尔服务器装完系统没启动项,华硕电脑重装系统后没有硬盘启动项是什么原因?...
  19. 11、数据分析--逻辑回归
  20. 北京东城区社保转出业务个人办理图解流程,需要的朋友可以参考

热门文章

  1. [健康小常识]夏季每日吃半个西瓜可降温解暑抗衰老
  2. python画动物代码_如何用python画简单的动物_后端开发
  3. Java程序员如何使用代码来计算最大公约数和最小公倍数?
  4. python的网络请求库urllib、urllib2、urllib3、request的联系
  5. vue里面怎么实现页面跳转_vue页面跳转如何实现 vue页面跳转实现代码
  6. JavaSE_集合框架_3
  7. 拉卡拉支付瞄准线下蓝海持续创新
  8. [JZOJ5909]【NOIP2018模拟10.16】跑商【圆方树】【树链剖分】
  9. Java程序员必看!java报表开发框架
  10. 技术分享 | 国产麒麟 arm 上编译安装 xtrabackup8