iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 索引分类
  • 820
分享到

MySQL 索引分类

mysql分类数据库 2023-10-24 14:10:04 820人浏览 独家记忆
摘要

文章目录 MySQL 索引分类1、按存储方式区分(1)B+Tree 索引1、BTree2、B+Tree3、BTree 个 B+Tree 的主要区别4、MySQL为什么选择B+Tree

文章目录

Mysql 索引分类

索引的类型和存储引擎有关,每种存储引擎所支持的索引类型不一定完全相同。mysql 中的索引,可以从存储方式使用逻辑实际使用等不同角度来进行分类

1、按存储方式区分

  • 索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。
  • 这样的话,索引是使用过程中,就要产生磁盘对索引文件的 I/O 消耗,相对于内存存取的消耗,I/O 存取的消耗要更高。所以评价索引的优劣最重要的指标,就是在查找过程中磁盘 I/O 操作次数的复杂度,而索引的本质都是基于某种数据结构来设计的,所以,索引的数据结构要尽量减少查找过程中磁盘 I/O 的存取次数
  • 根据数据结构存储方式的不同,Mysql 中常用的索引,在物理上分为 B+Tree 索引HASH 索引两类,两种不同类型的索引各有其不同的适用范围
(1)B+Tree 索引
1、BTree

B+Tree 是BTree 的一种特殊变种

  • BTree 是一个 多路平衡查找树(Balance Tree),多路也就是多叉的意思
  • 所有叶子节点在同一高度,保证数据有序

25213432-0c586d701246adeb.webp

假设要从图中查找id = X的数据,BTREE 搜索过程如下:

  1. 取出根磁盘块,加载4060两个关键字。
  2. 如果X = 40,则命中;如果X < 40P1;如果40 < X < 60P2;如果X = 60,则命中;如果X > 60P3
  3. 根据以上规则命中后,接下来加载对应的数据, 数据区中存储的是具体的数据或者是指向数据的指针。
2、B+Tree

B+Tree 在原有 BTree 的基础上补充了如下特性:

  • B+Tree 根节点和支节点没有数据区,数据data全部存储在叶子节点中;
  • 每一个父节点的值,都包含在叶子节点中,是叶子节点中==最大(或最小)==的元素;
  • 每一个叶子节点,都持有一个指向下一个叶子节点的指针,形成了有序链表

25213432-26f6ac27c92b2299.webp

假设为字段ID添加索引,搜索X = 1的数据,**B+TREE** 搜索过程如下:

  1. 取出根磁盘块,加载12866三个关键字。
  2. X <= 1P1,取出磁盘块,加载11020三个关键字。
  3. X <= 1P1,取出磁盘块,加载1 8 9三个关键字。
  4. 已经到达叶子节点,命中1,加载对应数据节点
3、BTree 个 B+Tree 的主要区别
  1. BTree的数据(或指向数据的指针)存在每个节点里,而 B+Tree的数据(或指向数据的指针)仅存在叶子节点里,非叶子节点只有索引。
  2. BTree 的查找,可能会在任意一个节点停止,而 B+Tree的查找相对稳定。
  3. B+Tree 的非叶子节点可以存储更多的索引值,阶数更高
  4. B+Tree 的叶子节点使用双向链表链接,提高顺序查询效率
  5. 相比于 BTreeB+Tree 在区间查找方面更胜一筹
4、MySQL为什么选择B+Tree
  1. B+Tree**全表扫描能力更强。**如果我们要根据索引去进行数据表的扫描,如果基于BTREE进行扫描,需要把整棵树遍历一遍,而B+TREE只需要遍历所有叶子节点即可(叶子节点之间形成有序列表)。
  2. B+Tree排序能力更强
  3. B+TREE**磁盘读写能力更强。**他的根节点和枝节点不保存数据区,所以根节点和枝节点同样大小的情况下,保存的关键字要比BTREE要多。所以,B+TREE读写一次磁盘加载的关键字比BTREE更多。
  4. B+Tree查询性能稳定。B+Tree数据只保存在叶子节点,每次查询数据,查询io次数一定是稳定的
(2)哈希索引
  • 哈希索引也称为散列索引或 HASH 索引。MySQL 目前仅有 MEMORY存储引擎和 HEAP存储引擎支持这类索引。
  • 哈希索引,是基于哈希表实现的一种索引结构。将字段的内容(key)通过哈希算法,计算该字段的哈希值,用于访问哈希表结构中的对应索引,该索引指向数据行

20210513092224836.png

1、哈希索引的特点
  • 无法用于排序与分组;
  • 只支持精确查找,无法用于部分查找和范围查找。
  • InnoDB 存储引擎有一个特殊的功能叫“自适应哈希索引”,当某个索引值被使用的非常频繁时,会在 B+Tree 索引之上再创建一个哈希索引,这样就让 B+Tree 索引具有哈希索引的优点,比如:快速的精准查找

2、使用逻辑区分

根据索引的具体用途,MySQL 中的索引在使用逻辑上分为以下 4 类:

(1)普通索引
  • 普通索引也被称为辅助索引。是 MySQL 中最基本的索引类型,它没有任何限制,唯一任务就是加快系统对数据的访问速度。
  • 普通索引允许在定义索引的列中,插入重复值和空值
  • 创建普通索引时,通常使用的关键字是 Index

示例:

tb_student 表中的 id 字段上建立名为 index_id 的索引

CREATE INDEX index_id ON tb_student(id);
(2)唯一索引
  • 唯一索引与普通索引类似,不同的是,创建唯一性索引的目的:除了提高访问速度以外,同时还能避免数据出现重复。
  • 唯一索引列的值必须唯一,允许有空值。如果是组合索引,则列值的组合必须唯一
  • 创建唯一索引通常使用 UNIQUE关键字

示例:

tb_student 表中的 id 字段上建立名为 index_id 的索引

CREATE UNIQUE INDEX index_id ON tb_student(id);
(3)主键索引
  • 主键索引就是专门为主键字段创建的索引,也属于索引的一种。主键索引是一种特殊的唯一索引,不允许值重复或者值为空。
  • 创建主键索引通常使用 PRIMARY KEY 关键字。不能使用 CREATE ``INDEX 语句创建主键索引,需要以创建或修改表结构的方式进行添加

示例:

tb_student 表中的 id 字段上添加主键索引

ALTER TABLE tb_student ADD PRIMARY KEY (id)
(4)全文索引
  • 全文索引主要用来查找文本中的关键字,只能在 CHARVARCHARTEXT 类型的列上创建。全文索引允许在索引列中插入重复值和空值。
  • 不过对于大容量的数据表,生成全文索引非常消耗时间和硬盘空间。
  • 创建全文索引使用 FULLTEXT关键字

示例:

tb_student 表中的 info 字段上建立名为 index_info 的全文索引

CREATE FULLTEXT INDEX index_info ON tb_student(info);

3、按实际的使用情况区分

(1)单列索引
  • 单列索引就是索引只包含原表的一个列。在表中的单个字段上创建索引,单列索引只根据该字段进行索引。
  • 单列索引可以是普通索引,也可以是唯一性索引,还可以是全文索引。只要保证该索引只对应一个字段即可。
(2)组合索引
  • 组合索引也称为复合索引或多列索引。相对于单列索引来说,组合索引是将原表的多个列共同组成一个索引。
  • 多列索引是在表的多个字段上创建一个索引。该索引指向创建时对应的多个字段,可以通过这几个字段进行查询。但是,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用

示例:

tb_student 表中的 nameaddress 字段上建立名为 index_na 的索引。该索引创建好了以后,查询条件中必须有 name 字段才能使用索引

CREATE INDEX index_na ON tb_student(name,address);
  • 一个表可以有多个单列索引,但这些索引不是组合索引。一个组合索引实质上为表的查询提供了多个索引,以此来加快查询速度。
  • 比如:在一个表中创建了一个组合索引(c1,c2,c3),在实际查询中,系统用来实际加速的索引有三个:单个索引(c1)、双列索引(c1,c2)和多列索引(c1,c2,c3)

来源地址:https://blog.csdn.net/weixin_62587914/article/details/132988041

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 索引分类

本文链接: https://www.lsjlt.com/news/441445.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL 索引分类
    文章目录 MySQL 索引分类1、按存储方式区分(1)B+Tree 索引1、BTree2、B+Tree3、BTree 个 B+Tree 的主要区别4、MySQL为什么选择B+Tree ...
    99+
    2023-10-24
    mysql 分类 数据库
  • MySQL 索引分类中单列索引的示例分析
    本篇文章为大家展示了MySQL 索引分类中单列索引的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 一个已分区的表不支持全文本...
    99+
    2024-04-02
  • mysql索引的分类有哪几种
    mysql 索引分为以下类型:1. 普通索引:匹配值、范围或前缀;2. 唯一索引:确保值唯一;3. 主键索引:主键列的唯一索引;4. 外键索引:指向另一表主键;5. 全文索引:全文搜索;...
    99+
    2024-04-22
    mysql mysql索引
  • mysql的索引类型和索引方法
    mysql 索引类型包括普通索引、唯一索引、全文索引、空间索引和哈希索引。索引方法有 btree、hash 和 rtree。选择合适的索引类型和方法取决于数据类型和查询模式,例如范围查找...
    99+
    2024-04-22
    mysql
  • 该如何进行MySQL的索引分类
    这篇文章给大家介绍该如何进行MySQL的索引分类,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MySQL的索引分类问题一直让人头疼,几乎所有的资料都会给你列一个长长的清单,给你介绍什么...
    99+
    2024-04-02
  • mysql索引类型有哪些
    这篇“mysql索引类型有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mysql索引...
    99+
    2024-04-02
  • mysql索引类型有哪些?
    在Mysql数据库当中,我们经常会谈到Sql语句,当然也会谈到索引优化,那么在数据库当中有哪些索引类型呢,博主在这里进行分享,希望对大家能有所帮助。 目录 1、B-Tree索引: 2、Hash索引: 3、Full-text索引: 4、...
    99+
    2023-09-07
    数据库
  • MySQL索引有哪些分类,你真的清楚吗?
    MySQL官方对索引的定义是:索引(Index)是帮助MySQL高效获取数据的数据结构。索引最形象的比喻就是图书的目录。注意只有在大量数据中查询时索引才显得有意义。 在MySQL中索引是在存储引擎...
    99+
    2023-09-25
    mysql b树
  • mysql如何修改索引类型
    本文小编为大家详细介绍“mysql如何修改索引类型”,内容详细,步骤清晰,细节处理妥当,希望这篇“mysql如何修改索引类型”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2024-04-02
  • mysql中索引类型是什么
    这篇文章给大家分享的是有关mysql中索引类型是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、索引类型主键索引只能作用于一个字段(列),字段值不能是null,也不能重复。唯一索引只能作用于一个字段,字段值...
    99+
    2023-06-15
  • mysql中索引有什么类型
    这篇文章主要介绍mysql中索引有什么类型,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MySQL目前主要有的索引类型为:普通索引、唯一索引、主键索引、组合索引、全文索引。下面本篇文...
    99+
    2024-04-02
  • mysql的索引有哪些类型
    mysql索引可快速查找数据,通过在键值对中存储列值和数据指针实现。常见的索引类型有:b-tree索引:支持范围查询,数据量大时性能佳。哈希索引:完全匹配查询快,但更新数据开销大。全文索...
    99+
    2024-04-22
    mysql 键值对
  • MySQL中有哪些索引类型
    本篇文章给大家分享的是有关MySQL中有哪些索引类型,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.B-Tree索引因为存储引擎不⽤进⾏全表扫描来获取数据,直接从索引的根节点...
    99+
    2023-06-14
  • MongoDB索引类型汇总分享
    目录单字段索引在单个字段上创建升序索引在嵌入式字段上创建索引在内嵌文档上创建索引复合索引多键索引文本索引2dsphere索引创建测试数据添加2dsphere索引利用2dsphere索...
    99+
    2024-04-02
  • MySQL索引知识点分析
    这篇文章主要介绍“MySQL索引知识点分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL索引知识点分析”文章能帮助大家解决问题。1索引的概念1.1定义索引在关系型数据库中,是一种单独的、物...
    99+
    2023-07-02
  • MySQL索引的示例分析
    这篇文章给大家分享的是有关MySQL索引的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言我们知道,索引的选择是优化器阶段的工作,但是优化器并不是万能的,它有可能选错所...
    99+
    2024-04-02
  • mysql 索引类型有哪些,分别有哪些作用
    MySQL 支持多种索引类型,每种类型都有其特定的用途和优势。以下是 MySQL 中常见的索引类型及其作用:B-Tree 索引(默认)作用:B-Tree 索引是最常见的索引类型,用于加速数据的检索速度。特点:B-Tree 索引能够保持数据的...
    99+
    2024-03-08
    索引 mysql索引类型
  • [MySQL]MySQL索引
    [MySQL]MySQL索引 文章目录 [MySQL]MySQL索引1. 索引的概念2. 认识磁盘磁盘的内部结构磁盘中的一个盘片结构定位扇区磁盘随机访问与连续访问 3. MySQL与磁盘交互的基本单位4. 建立共识5. 索引的...
    99+
    2023-08-17
    mysql 数据库 linux centos 阿里云
  • MySQL索引类型Normal、Unique和Full Text的示例分析
    小编给大家分享一下MySQL索引类型Normal、Unique和Full Text的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!MySQL的索引类型有普通索引(normal),唯...
    99+
    2024-04-02
  • MySQL索引怎么实现分页探索
    这篇文章主要讲解了“MySQL索引怎么实现分页探索”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL索引怎么实现分页探索”吧!MySQL索引优化之分页探索表结构CREATE ...
    99+
    2023-06-21
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作