MySQL索引

目录​​​​​​​

一、定义

二、索引的作用

三、MySQL索引常用的数据结构

1. B+Tree

2. Hash

3.Full-text(全文)

4.R-Tree

四、索引的分类(根据索引的具体用途)

1.主键索引

2.普通索引

3.唯一性索引

4.全文索引

5.空间索引


一、定义

索引是 MySQL中一种十分重要的数据库对象,可以帮助MySQL高效获取数据。它实质上是一张描述索引列的列值与原表中记录行之间一一对应关系的有序表,类似于书籍的目录。

二、索引的作用

1.加快查询速度:索引可以显著减少数据库引擎需要扫描的数据量,从而加快查询速度。

2.确保数据的唯一性:通过创建唯一索引,可以确保表中的每一行数据在索引列上的值都是唯一的。这对于维护数据的完整性和一致性至关重要。

3.用于排序和分组:通过建立索引能有效的减少检索过程中所需的分组及排序时间。

三、MySQL索引常用的数据结构

1. B+Tree

(1)特点:

  • 所有值都出现在叶子节点:这使得查询操作更加高效,因为非叶子节点只存储键值信息,不存储实际数据。
  • 叶子节点之间互相链接:这提高了区间访问的性能,使得范围查询更加高效。原B+Tree的基础上增加一个指向相邻叶子节点的链表指针,形成了带有顺序指针的B+Tree,这进一步提高了区间访问的性能。
  • 非叶子节点仅存储关键字信息:用于索引,不存储实际数据,减少了磁盘I/O次数。

(2)支持该索引的存储引擎:

  • InnoDB
  • MyISAM

2. Hash

(1)特点:

  • 等值查询效率高:对于等值查询(即查找某个特定值),Hash索引的查询效率非常高,时间复杂度为O(1)。
  • 不支持范围查询:由于哈希表的特性,Hash索引不支持范围查询,如BETWEEN、>、<等操作符。
  • 冲突解决:当存在哈希冲突时(即不同的键值计算出相同的哈希值),MySQL通常通过链表来解决冲突,但这会增加查询的成本。
  • 存储引擎支持有限:在MySQL中,只有Memory存储引擎支持Hash索引,而InnoDB存储引擎虽然不直接支持Hash索引,但具有自适应哈希索引功能,这是InnoDB自动生成的,不能人为干预,且主要用于等值查询优化。

(2)支持该索引的存储引擎

  • Memory

3.Full-text(全文)

(1)特点:

  • 专为文本搜索设计:全文索引是专门为了加速文本数据的搜索而设计的,它支持对文本内容进行分词并索引,以实现高效的文本搜索。
  • 支持复杂查询:全文索引不仅支持简单的关键词搜索,还支持模糊搜索、词组搜索和布尔搜索等复杂查询方式,提供了更灵活的查询能力。
  • 自然语言处理:全文索引能够理解自然语言,通过分词和索引技术,提供更准确的搜索结果。
  • 占用额外空间:由于全文索引需要对文本内容进行分词和索引,因此会占用额外的磁盘空间。

(2)支持该索引的存储引擎

  • InnoDB
  • MyISAM

4.R-Tree

(1)特点

  • 专为空间数据设计:R-Tree索引是一种专门为地理空间数据设计的索引,它适用于存储和检索空间数据类型,如点、线、面等。
  • 最小边界矩形(MBR):R-Tree通过记录空间数据的最小边界矩形(MBR)来组织索引,这有助于快速定位包含查询区域的空间对象。
  • 支持多维数据:R-Tree索引支持多维数据的索引和检索,适用于处理复杂的地理空间数据。
  • 高效的空间查询:R-Tree索引能够显著提高空间查询的效率,如点查询、范围查询等。

(2)支持该索引的存储引擎

  • MyISAM

四、索引的分类(根据索引的具体用途)

1.主键索引

主键索引是一种唯一性索引,不允许值重复或者值为空,并且每个表只能有一个主键。主键索引又叫聚集索引(其它索引称为非聚集索引),或者主索引(其它索引称为二级索引)。

注意:一般建议选择较小的数据类型作为主键(如INT或BIGINT)可以减少索引大小和内存使用,从而提高性能。自增主键还可以减少页面分裂(Page Split)和碎片(Fragmentation)问题。

2.普通索引

普通索引是最基本的索引类型,唯一任务是加快对数据的访问速度,没有任何限制。

注意:创建普通索引时通常使用的关键字是 INDEX 或 KEY。

3.唯一性索引

唯一性索引是不允许索引列具有相同索引值的索引。如果能确定某个数据列只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该 把它定义为一个唯一性索引。 创建唯一性索引的目的往往不是为了提高访问速度,而是为了避免数据出现重复。
注意:虽然唯一性索引可以提高查询性能,但它在插入和更新数据时会有额外的性能开销,因为数据库需要检查新值是否违反了唯一性约束。

4.全文索引

全文索引专门用于在大量文本数据中搜索特定的词组或短语。只能在 VARCHAR、Char、TEXT 类型的列上创建,并且只能在 InnoDB和 MyISAM存储引擎上创建
注意:对于中文内容,MySQL的全文索引默认可能不是最佳选择,因为它基于单词分词。可能需要使用第三方分词插件或工具来提高搜索精度。

5.空间索引

空间索引主要用于地理空间数据类型 GEOMETRY。主要在地理信息系统(GIS)、地图应用、位置服务等场景来快速定位和查询地理空间数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值