MySQL 索引类型详解

MySQL 索引类型及选择建议

1. 按数据结构分类

(1) B-Tree 索引(实际使用 B+Tree)

  • 特点

    • 默认的索引类型

    • 适合全键值、键值范围或键前缀查找

    • 支持排序和分组操作

  • 适用场景

    • 等值查询(=)

    • 范围查询(>, <, BETWEEN)

    • 排序(ORDER BY)

    • 分组(GROUP BY)

  • 限制

    • 不适用于以通配符开头的 LIKE 查询(如 LIKE '%abc'

    • 必须从最左列开始使用索引

(2) 哈希索引

  • 特点

    • 基于哈希表实现

    • 只有精确匹配所有列的查询才有效

    • 检索速度非常快(O(1)时间复杂度)

  • 适用场景

    • 等值查询(=, IN())

    • Memory 引擎的默认索引类型

  • 限制

    • 不支持范围查询

    • 不支持排序

    • 不支持部分索引列的查询

    • 有哈希冲突问题

(3) 全文索引(FULLTEXT)

  • 特点

    • 专门用于文本内容的搜索

    • 支持自然语言搜索和布尔搜索

    • 使用倒排索引实现

  • 适用场景

    • 文本字段的关键词搜索

    • 内容管理系统中的搜索功能

  • 限制

    • 仅适用于 MyISAM 和 InnoDB(5.6+)引擎

    • 对中文支持不够友好(需配合分词插件)

(4) R-Tree 索引(空间索引)

  • 特点

    • 用于地理空间数据类型

    • 支持 GIS 数据查询

  • 适用场景

    • 地理位置查询

    • 地图应用中的距离计算等

2. 按逻辑功能分类

(1) 普通索引(INDEX)

  • 最基本的索引类型,无特殊约束

  • 创建语法:CREATE INDEX index_name ON table(column)

(2) 唯一索引(UNIQUE)

  • 索引列的值必须唯一,但允许 NULL 值

  • 创建语法:CREATE UNIQUE INDEX index_name ON table(column)

(3) 主键索引(PRIMARY KEY)

  • 特殊的唯一索引,不允许 NULL 值

  • 一个表只能有一个主键

  • 创建语法:ALTER TABLE table ADD PRIMARY KEY(column)

(4) 复合索引(多列索引)

  • 在多个列上建立的索引

  • 遵循"最左前缀原则"

  • 创建语法:CREATE INDEX index_name ON table(col1, col2, col3)

(5) 前缀索引

  • 对文本列的前N个字符建立索引

  • 可节省索引空间

  • 创建语法:CREATE INDEX index_name ON table(column(N))

3. 特殊索引类型

(1) 覆盖索引

  • 查询的列都包含在索引中,无需回表

  • 可显著提高查询性能

(2) 聚簇索引(InnoDB 主键索引)

  • 索引的叶子节点存储了完整的数据记录

  • InnoDB 的表必须有且只有一个聚簇索引

(3) 二级索引(非聚簇索引)

  • 叶子节点存储的是主键值而非数据

  • 查询时需要回表操作

索引选择建议

  1. 适合建索引的列

    • WHERE 子句中的常用列

    • JOIN 连接使用的列

    • ORDER BY/GROUP BY 的列

    • 高选择性的列(区分度高)

  2. 不适合建索引的列

    • 数据量小的表

    • 频繁更新的列

    • 区分度低的列(如性别)

    • TEXT/BLOB 等大字段(考虑前缀索引)

  3. 复合索引设计原则

    • 将选择性高的列放在前面

    • 考虑查询频率和排序需求

    • 遵循最左前缀原则

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值