什么是索引_mysql索引基础概念

来源:这里教程网 时间:2026-02-28 20:37:13 作者:

索引是 MySQL 中一种专门用来加速数据查找的数据结构,本质就像一本书的目录——不翻完整本书,也能快速定位到某一页。

索引是怎么工作的

MySQL 把表中某列(或几列)的值按特定规则排序并保存,同时记录这些值对应数据行的物理位置(比如主键 ID 或磁盘地址)。执行查询时,数据库先查索引找到匹配项的位置,再直接跳过去取数据,避免全表扫描。

例如:

username 列建了索引,执行
SELECT * FROM users WHERE username = 'alice'
时,MySQL 不会逐行比对所有用户名,而是通过索引快速锁定 alice 所在的行。
没有索引时,4 万行的表可能要读取全部数据;有索引后,通常只需读几十个索引节点就能定位。

索引不是万能的,它有明确代价

索引提升查询速度,但会拖慢写操作,并占用额外空间:

每次 INSERT/UPDATE/DELETE 都要同步更新相关索引,写得越频繁,开销越明显。 索引本身需要存储空间,尤其对大字段(如长文本、JSON)建索引,体积可能接近原表。 过多索引会让优化器选择困难,反而降低查询计划质量。

常见索引类型和用途

MySQL 默认使用 B+Tree 结构,不同索引类型适用于不同场景:

主键索引:自动创建,唯一且非空,InnoDB 中就是聚簇索引,决定数据物理存放顺序。 唯一索引:保证列值不重复(允许 NULL),适合邮箱、手机号等业务唯一字段。 普通索引:最基础的加速查询索引,无约束,可重复、可为空。 联合索引:多列组合成一个索引,如
(age, created_at)
,遵循最左前缀原则(where age=25 可用,where created_at='2025-01-01' 则不可用)。
全文索引:专为文本模糊搜索设计(如 LIKE '%关键词%'),支持自然语言或布尔模式匹配。

什么时候该加索引

不是所有字段都值得建索引。优先考虑:

常出现在 WHERE 条件中的字段(尤其是高选择性字段,如用户ID、订单号)。 经常用于 ORDER BYGROUP BY 的列,可避免临时文件排序。 作为 JOIN 关联条件的外键列。 数据量大(比如 >1 万行)、查询频次远高于修改频次的表。

相关推荐