MySQL有5种索引类型及其特点详解

 更新时间:2026年01月15日 09:46:50   作者:旷野说  
MySQL中的索引类型多种多样,每种索引类型都有其特定的使用场景和优势,这篇文章主要介绍了MySQL有5种索引类型及其特点的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

MySQL(尤其是 InnoDB 引擎)支持多种索引类型,不同索引适用于不同场景。以下是 MySQL 中常见的索引类型及其特点,按逻辑分类物理结构两个维度说明:

一、按逻辑用途分类(常用)

1.主键索引(Primary Key)

  • 唯一且非空,一张表只能有一个。
  • InnoDB 中,主键索引就是 聚簇索引(Clustered Index):数据行与索引存储在一起。
  • 选择原则:尽量使用自增整数(避免页分裂),避免使用 UUID(随机写性能差)。

2.唯一索引(Unique Index)

  • 索引列的值必须唯一,但允许有 NULL(多个 NULL 不冲突)。
  • 适用于:手机号、订单号、用户 ID 等业务唯一字段。
  • 创建方式:
    CREATE UNIQUE INDEX idx_user_phone ON users(phone);
    

3.普通索引(Secondary Index / Normal Index)

  • 最基础的索引类型,允许重复值、允许 NULL
  • 用于加速 WHEREJOINORDER BY 等查询。
  • 示例:
    CREATE INDEX idx_order_status ON orders(status);
    

4.组合索引(Composite Index / 联合索引)

  • 多个列创建一个索引,如 (col1, col2, col3)
  • 遵循 最左前缀原则(Leftmost Prefix Rule)
    • 查询条件必须从最左列开始,才能命中索引。
    • 例如:索引 (a, b, c) 可用于 WHERE a=1WHERE a=1 AND b=2,但不能用于 WHERE b=2
  • 建议:把区分度高(选择性好)的列放前面。

5.前缀索引(Prefix Index)

  • 长字符串字段(如 VARCHAR(255))只索引前 N 个字符。
  • 减少索引大小,提升性能。
  • 示例:
    CREATE INDEX idx_email_prefix ON users(email(20)); -- 只索引前20字符
    
  • ⚠️ 注意:前缀长度需通过 SELECT COUNT(DISTINCT LEFT(email, N)) / COUNT(*) 估算区分度。

二、按物理结构分类(InnoDB)

1.聚簇索引(Clustered Index)

  • 数据即索引:叶子节点存储完整的数据行。
  • InnoDB 自动使用主键作为聚簇索引;若无主键,则选择第一个唯一非空索引;否则用隐藏的 row_id
  • 优点:主键查询极快(一次 I/O)。
  • 缺点:二级索引需“回表”(先查二级索引 → 再查聚簇索引)。

2.二级索引(Secondary Index)

  • 叶子节点存储的是主键值,不是完整数据。
  • 查询流程:二级索引 → 主键值 → 聚簇索引 → 获取数据(回表)。
  • 优化回表:使用 覆盖索引(Covering Index),即查询字段全部包含在索引中,无需回表。

三、特殊索引类型(特定场景)

1.全文索引(Full-Text Index)

  • 用于 TEXTVARCHAR 字段的全文搜索(如文章内容搜索)。
  • 支持 MATCH() AGAINST 语法。
  • InnoDB 从 MySQL 5.6 开始支持。
  • 示例:
    CREATE FULLTEXT INDEX idx_content ON articles(content);
    SELECT * FROM articles WHERE MATCH(content) AGAINST('数据库');
    
  • ⚠️ 不适用于电商商品名等短文本(用 ES 更合适)。

2.空间索引(SPATIAL Index)

  • 用于 GEOMETRY 类型字段(如地图坐标、区域)。
  • 仅 MyISAM 和 InnoDB(MySQL 5.7+)支持。
  • 使用 R-TREE 结构,支持 ST_Contains() 等空间函数。

四、不推荐或已废弃的索引

索引类型说明
HASH 索引Memory 引擎支持,InnoDB 不支持(但自适应哈希索引 AHI 是内部优化)
RTREE 索引旧版 MyISAM 用,现已被 SPATIAL 取代

💡 InnoDB 的 自适应哈希索引(Adaptive Hash Index, AHI) 是 InnoDB 自动为热点索引页构建的内存哈希结构,无需手动创建,可通过 SHOW ENGINE INNODB STATUS 查看。

五、索引设计黄金法则(电商场景重点)

  1. 主键自增:避免 UUID 导致聚簇索引频繁页分裂。
  2. 组合索引合理排序:高频过滤字段放前,范围查询字段放后(如 (user_id, create_time))。
  3. 避免冗余索引(a,b)(a) 同时存在是冗余的。
  4. 大字段慎建索引:如 description 字段,优先考虑前缀索引或异构存储(如 Elasticsearch)。
  5. 监控慢查询:用 EXPLAIN 分析是否命中索引,关注 type(最好 ref/range,避免 ALL)。

六、查看索引命令

-- 查看表索引
SHOW INDEX FROM table_name;

-- 查看执行计划
EXPLAIN SELECT * FROM orders WHERE user_id = 100;

-- 查看索引使用统计(MySQL 8.0+)
SELECT * FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE object_schema = 'your_db' AND object_name = 'your_table';

总结

在电商开发中,主键索引 + 唯一索引 + 合理的组合索引 足以覆盖 95% 场景。

牢记:索引不是越多越好,而是越精准越好

到此这篇关于MySQL有5种索引类型及其特点的文章就介绍到这了,更多相关MySQL索引类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用MySQL创建数据库和数据库表代码

    用MySQL创建数据库和数据库表代码

    了解了一些最基本的操作命令后,我们再来学习如何创建一个数据库和数据库表。
    2008-10-10
  • MySQL中的SQL标准语句详解

    MySQL中的SQL标准语句详解

    SQL(Structured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。虽然SQL可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为方言
    2022-09-09
  • MySQL触发器自动智能化的数据维护

    MySQL触发器自动智能化的数据维护

    这篇文章主要介绍了MySQL触发器自动智能化的数据维护,触发器,就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段
    2022-07-07
  • mysql连接过多和死掉以及拒绝服务的解决方法

    mysql连接过多和死掉以及拒绝服务的解决方法

    mysql连接过多和死掉以及拒绝服务的解决方法...
    2007-12-12
  • mysql 5.7.17 winx64安装配置图文教程

    mysql 5.7.17 winx64安装配置图文教程

    这篇文章主要为大家分享了mysql 5.7.17 winx64安装配置方法图文教程,感兴趣的朋友可以参考一下
    2017-01-01
  • MySQL中的 Binlog 深度解析及使用详情

    MySQL中的 Binlog 深度解析及使用详情

    这篇文章主要介绍了MySQL中的 Binlog 深度解析及使用详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • MySQL中查询的进阶运用方法实例详解

    MySQL中查询的进阶运用方法实例详解

    MySQL数据库查询语句是数据库操作中非常关键的一部分,它允许用户从数据库中检索数据,下面这篇文章主要介绍了MySQL中查询进阶运用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-04-04
  • MySQL安全模式下创建账号的操作指南

    MySQL安全模式下创建账号的操作指南

    MySQL 的安全模式通常指在跳过权限验证或限制特定功能的状态下启动数据库,常用于管理员密码遗忘、权限损坏等紧急维护场景,本文给大家介绍了如何在MySQL安全模式下创建账号,需要的朋友可以参考下
    2026-05-05
  • Windows环境下MySQL主从复制搭建全步骤(超详细实操版)

    Windows环境下MySQL主从复制搭建全步骤(超详细实操版)

    MySQL支持主数据库与从数据配置,采用此配置的数据库,MySQL会自动将主数据库中的数据同步到从数据库中,这篇文章主要介绍了Windows环境下MySQL主从复制搭建详细实操的相关资料,需要的朋友可以参考下
    2026-02-02
  • MySQL8.0.21安装步骤及出现问题解决方案

    MySQL8.0.21安装步骤及出现问题解决方案

    这篇文章主要介绍了MySQL8.0.21安装步骤及出现问题解决方案,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12

最新评论