我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL索引的各种类型

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL索引的各种类型

什么是索引?

索引是数据库存储引擎用于快速查找到指定数据的一种数据结构。

可以用新华字典做类比:如果新华字典中对每个字的详细解释是数据库中表的记录,那么按部首或拼音等排序的目录就是索引,使用它可以让我们快速查找的某一个字详细解释的位置。

在MySQL中,存储引擎也是用了类似的方法,先在索引中找到对应的值,然后再根据匹配的索引值找到对应表中记录的位置。

面试中为什么问索引?

之所以在索引在面试中经常被问到,就是因为:索引是数据库的良好性能表现的关键,也是对查询能优化最有效的手段。索引能够轻易地把查询性能提高几个数量级。

然而,糟糕的索引也同样会影响查询性能,当表中的数据量越来越多的时候,索引对性能的影响就越大。在数据量比较少并且负责比较低的时候,糟糕的索引对性能的影响可能不明显,但是当数据量逐渐增多的时候,性能会急剧下降。

索引的类型

经过前面的介绍,我们就进入正题,了解一下MySQL支持的索引类型,以及它们的原理和用法。

不同类型的索引,可以为不同场景提供更好的性能。在MySQL中,索引是在存储引擎层面实现的,而不是在服务器层面实现的。正如大家所知道,MySQL支持多种类型的存储引擎。所以,在不同存储引擎中索引的实现方式并不是一样的,也不是所有类型的索引都被所有存储引擎支持的,即使多个存储引擎支持同一种类型的索引,它底层的实现也有可能是不相同的。

B-Tree索引

B-Tree索引是被大多数MySQL存储引擎支持的,在我们讨论索引时,假如没有特别地说明类型,那么大概率说的就是B-Tree索引了。我们使用B-Tree这个词,是因为MySQL在创建表和其他语句中就使用这个关键字。

然而,在不同存储引擎的底层可能使用不同的数据结构和算法,比如:InnoDB存储引擎内部使用的是B+Tree结构,NDB集群存储引擎内部使用的是T-Tree结构。不同存储引擎用以不同的方式使用B-Tree索引,性能也可能不同,比如:InnoDB的索引上存储的是原数据格式,而MyISAM存储引擎使用前缀压缩技术使索引更小,InnoDB索引的行存储的数据行的主键引用,而MyISAM存储引擎的索引的行存储的是数据行的物理位置。

B-Tree索引的原理

B-Tree索引能够加快访问数据的速度,因为不需要全表扫描就可以快速检索的需要的数据。那么B-Tree索引是怎么做到的呢?我们通过一个简单的例子了解一下InnoDB的B-Tree索引是怎么工作的:


CREATE TABLE `om_address` (
 `province_name` varchar(255) NOT NULL COMMENT '省',
 `city_name` varchar(255) NOT NULL COMMENT '市',
 `district_name` varchar(255) NOT NULL COMMENT '区',
 `detailed_address` varchar(255) NULL DEFAULT NULL COMMENT '详细地址',
 INDEX `index_province_city_district`(`province_name`, `city_name`, `district_name`) USING BTREE
) ENGINE = InnoDB;

这个表中共有4个字段,分别表示省、市、区和详细地址,还有一个B-Tree索引,其中包含了省、市、区三个字段。因为索引的所有值都是按照顺序存储的,即:节点的左子树比当前节点小,节点的右子树比当前节点大。那么当查询数据时,从索引的根节点开始搜索,根据比较当前节点的索引值向子树进行查找,直到找到对应的索引值,或者根本没有找到。

B-Tree索引的用法

根据B-Tree索引的特点,它可以用于全值匹配、值范围匹配和最左前缀匹配。

  • 全值匹配是指和索引中所有的字段进行匹配,比如:查询黑龙江省哈尔滨市南岗区的数据。
  • 值范围匹配是指索引中字段的某一范围进行匹配,但是必须满足前面字段的全匹配,比如:第一个字段province_name省名称的全匹配,第二个字段city_name城市名称的范围匹配。
  • 最左前缀匹配是指索引中字段的某一开头部分进行匹配,但是必须满足前面字段的全匹配,比如:第一个字段province_name省名称为内蒙古,第二个字段city_name城市名称以“呼”开头。

哈希索引

哈希索引是基于哈希表实现的,用于精确匹配索引所指向的数据。存储引擎对每一行数据的所有索引字段计算出一个哈希码,哈希码是一个比较小的值,并且不同的数据计算出来的哈希码一般情况下也不一样。哈希索引中存放了这个哈希码和指向这个数据行的指针。

在MySQL中,只有Memory存储引擎支持哈希索引,也是Memory存储引擎的默认索引类型。另外,在InnoDB存储引擎中也运用了哈希索引,叫做自适应哈希索引。当某些索引中被非常频繁的使用时,InnoDB存储引擎会在内存中基于B-Tree索引之上再创建一个哈希索引,这样一来使得B-Tree索引也具有的快速哈希查找的优点。

哈希索引因为只需存放对应数据的哈希值,所以索引的结构非常紧凑,占用空间小,同时查询速度也非常快。不过,哈希索引只支持全值等值查询,不能索引字段范围匹配和部分索引字段匹配。

空间数据索引

空间数据索引(R-Tree)主要用于地理数据的存储,会从所有维度来索引数据,查询时可以有效的使用任意维度进行组合查询。 目前,MyISAM存储引擎支持空间数据索引,不过必须使用MySQL的GIS相关的函数来维护数据。

在MySQL中,空间索引只能建立在空间数据类型上,如:GEOMETRY、POINT、LINESTRING等。

全文索引

全文索引不像之前介绍的索引那样直接比较索引中的值,而是直接比较查找的文本中的关键词,它类似于搜索引擎做的事情,不是简单的where条件匹配。

在相同的字段上,可以同时创建全文索引和B-Tree索引,不会有冲突。全文索引适用于match和against操作,不是普通的where条件操作。在MySQL中,只能在类型为CHAR、VARCHAR、TEXT的字段上创建全文索引。

总结

索引是数据库存储引擎用于快速查找到指定数据的一种数据结构,它包括B-Tree索引、哈希索引、空间数据索引、全文索引,其中B-Tree索引是我们最常用到的,InnoDB存储引擎内部使用的是B+Tree结构;哈希索引是基于哈希表实现的,用于精确匹配索引所指向的数据;空间数据索引从所有维度来索引数据,查询时可以有效的使用任意维度进行组合查询;全文索引是直接比较查找的文本中的关键词,类似于搜索引擎。

以上就是MySQL索引的各种类型简介的详细内容,更多关于MySQL 索引类型的资料请关注自学编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL索引的各种类型

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

下载Word文档

猜你喜欢

MySQL索引的各种类型

什么是索引? 索引是数据库存储引擎用于快速查找到指定数据的一种数据结构。 可以用新华字典做类比:如果新华字典中对每个字的详细解释是数据库中表的记录,那么按部首或拼音等排序的目录就是索引,使用它可以让我们快速查找的某一个字详细解释的位置。 在
2022-05-30

mysql各种类型的字段

原文:https://www.cnblogs.com/herd/p/13812943.html
mysql各种类型的字段
2022-01-21

mysql的索引类型和索引方法

mysql 索引类型包括普通索引、唯一索引、全文索引、空间索引和哈希索引。索引方法有 btree、hash 和 rtree。选择合适的索引类型和方法取决于数据类型和查询模式,例如范围查找使用普通索引或哈希索引,全文搜索使用全文索引,空间查询
mysql的索引类型和索引方法
2024-04-22

MySQL索引概念及七种索引类型分享介绍

目录1 索引的概念2 索引的类型1 索引的概念索引(在mysql中也叫做“键(key)”)是存储引擎用于快速找到记录的一种数据结构,这也是索引最基本的功能。索引对于良好的性能非常关键。数据量越大时,索引对性能的影
2022-08-22

mysql的索引有哪些类型

mysql索引可快速查找数据,通过在键值对中存储列值和数据指针实现。常见的索引类型有:b-tree索引:支持范围查询,数据量大时性能佳。哈希索引:完全匹配查询快,但更新数据开销大。全文索引:索引文本数据,支持全文搜索。空间索引:索引地理空间
mysql的索引有哪些类型
2024-04-22

mysql索引的分类有哪几种

mysql 索引分为以下类型:1. 普通索引:匹配值、范围或前缀;2. 唯一索引:确保值唯一;3. 主键索引:主键列的唯一索引;4. 外键索引:指向另一表主键;5. 全文索引:全文搜索;6. 哈希索引:相等匹配搜索;7. 空间索引:地理空间
mysql索引的分类有哪几种
2024-04-22

mysql索引类型 normal, unique, full text

normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique full textl: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的
mysql索引类型 normal, unique, full text
2021-10-23

MySQL中有哪些索引类型

本篇文章给大家分享的是有关MySQL中有哪些索引类型,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.B-Tree索引因为存储引擎不⽤进⾏全表扫描来获取数据,直接从索引的根节点
2023-06-14

mysql中索引类型是什么

这篇文章给大家分享的是有关mysql中索引类型是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、索引类型主键索引只能作用于一个字段(列),字段值不能是null,也不能重复。唯一索引只能作用于一个字段,字段值
2023-06-15

编程热搜

目录