mysql的索引有哪些

MySQL的主要索引如下:1、B树索引(INDEX或KEY):用于快速查找数据的主索引。
大多数MySQL存储引擎(例如InnoDB和MyISAM)都使用B树结构进行索引处理。
它通过创建有序的数据结构来快速定位数据记录。
在进行数据查询时,可以通过索引快速定位到对应的数据块,从而大大提高查询效率。
2、哈希指针(HASH):适合等价查询,可以快速确定数据的具体位置。
MySQL的内存存储引擎支持哈希索引。
哈希指针的特性是通过根据键值计算哈希值来快速定位数据。
对于等值查询性能较高,但对于范围查询性能较差。
需要注意的是,哈希索引无法避免不同节点之间数据的聚合,因此对于包含大量重复键值的列创建哈希索引并不是最佳选择。
另外,当内存中的哈希表占用大量空间时,性能和存储空间都会受到影响。
因此,在实际应用中,需要根据具体情况选择是否使用哈希索引。
3、空间索引(R树):主要用于索引地理空间数据类型,如点、线、多边形等。
MySQL的MyISAM存储引擎支持空间索引。
空间索引主要应用于空间数据的范围查询、邻近查询等场景,空间索引可以极大地提高空间数据的查询效率。
空间索引适用于地理信息系统等应用场景。
此外,还有一些其他特殊类型的索引,如全文索引等。
这些索引类型可以在某些特定场景下提供高效的查询性能。
4、复合索引:复合索引是由多个列组成的索引。
创建复合索引时,必须考虑如何对列进行排序和组合,以便在查询时能够充分利用索引。
复合索引适用于需要基于多列进行条件查询的场景,可以提高查询效率,减轻数据库的负担。
需要注意的是,列排列和复合索引组合需要根据实际情况进行优化,以充分发挥性能优势。
简而言之,MySQL提供了类型多种指标满足不同应用场景的需求。
在实际应用中,需要根据数据特征和查询需求选择合适的索引类型,并对其进行优化和调优,以获得最佳性能。

MySQL系列(二)—索引分类

上一节介绍了基本的索引数据结构以及为什么MySQL使用B+Tree作为基本结构。

InnoDB存储引擎下的索引

在InnoDB引擎下,表数据文件本身构成B+Tree索引结构,叶子节点包含完整数据,形成聚集索引。
主键索引以外的所有索引都称为辅助索引,辅助索引的叶子节点存储主键的值。

主键索引

InnoDB引擎的数据组织方式是聚集索引,数据和索引存储在同一个文件中。
主键索引查询流程如下:

等值查询:例如查询id=30的数据范围查询:例如查询30<=id<50>查询流程涉及多次磁盘读取,但由于索引和数据紧密耦合,可以快速检索行数据并节省磁盘IO操作。

辅助索引

辅助索引说明了InnoDB引擎下存储主键值的叶子节点的特性。
等值查询和范围查询的过程涉及多次磁盘读取和回表查询,通过主键值来访问主键索引。

MyISAM存储引擎下的索引

MyISAM索引文件与数据文件分开存储,索引存储在“.MYI”文件中,数据存储在“.MYD”文件中。
主键索引的叶子节点存储了数据对应的磁盘地址。

主键索引

查询数据处理涉及多次磁盘读取,但索引与数据的紧密关系仍然可以提高性能。

共享索引

共享索引是基于多个字段创建的,索引树按照字段的顺序排序。
共享索引搜索过程涉及多次磁盘读取。

覆盖索引

覆盖索引可以直接从辅助索引中取出需要的数据,避免了返表操作,提高了性能。
创建索引时应考虑覆盖索引的使用。

InnoDB和MyISAM引擎下索引分类概述,以及共享索引和覆盖索引的概念。
下面将重点介绍SQL优化和索引策略,以提高查询性能。

如有疑问,请指正!