0

0

什么是mysql索引_mysql索引基础原理解析

P粉602998670

P粉602998670

发布时间:2026-02-20 00:17:35

|

698人浏览过

|

来源于php中文网

原创

索引是数据库查询性能的分水岭,b+树因其支持范围查询、高io效率和稳定性成为mysql默认结构;建索引需关注选择性、短字段优先及组合索引最左前缀原则。

什么是mysql索引_mysql索引基础原理解析

索引就是数据库的“目录”,不是可有可无的加速器,而是查询能否跑得动的分水岭

没有索引时,SELECT * FROM users WHERE email = 'a@b.com' 可能要扫描几百万行;加了索引后,MySQL 直接跳到目标位置,只查 1–3 层 B+ 树节点。这不是“快一点”,而是从 O(n) 降到 O(log n)——1000 万行数据,全表扫描平均扫 500 万行,B+ 树最多查 4 次磁盘(假设扇区大小和填充率典型值)。关键在于:索引不是为“偶尔慢一下”准备的,是为“每次都要快”设计的基础设施。

为什么 B+ 树是 MySQL 默认索引结构,而不是哈希或普通二叉树

哈希索引(如 MEMORY 引擎支持)只能做等值查询(=),不支持 ORDER BYBETWEENLIKE 'abc%';普通二叉树在数据写入不均衡时会退化成链表,查询变 O(n)。而 B+ 树:

  • 所有数据都在叶子节点,且叶子节点用双向链表连起来 → 支持范围扫描和排序
  • 非叶子节点只存键值不存行数据 → 单页能放更多分支,树更矮,IO 更少
  • 每个节点填充分率通常 ≥50% → 插入/删除时分裂合并可控,稳定性强
所以 InnoDB 所有索引(包括主键)底层都是 B+ 树,连 PRIMARY KEY 本身都决定了数据物理存储顺序。

哪些字段适合建索引?别只看“WHERE 里用了”,要看选择性和过滤效率

判断一个字段值是否值得索引,核心公式是:选择性 = COUNT(DISTINCT column) / COUNT(*)。比如:

剪刀手
剪刀手

全自动AI剪辑神器:日剪千条AI原创视频,零非原创风险,批量高效制作引爆流量!免费体验,轻松上手!

下载
  • email 字段选择性接近 1.0(每人邮箱基本唯一)→ 强烈推荐索引
  • status ENUM('active','inactive','pending') 选择性最多 0.33 → 即使出现在 WHERE 中,MySQL 也大概率放弃走索引,改用全表扫描
  • created_at 时间戳选择性高,但若常查 WHERE created_at > '2025-01-01',需确认该范围是否真的过滤掉大量数据;如果近 90% 数据都满足条件,索引收益极低
另外,短索引更优:VARCHAR(50)VARCHAR(500) 建索引更快、更省空间、缓存命中率更高——哪怕你只存 10 个字符,定义过长也会让索引页容纳更少键值,拖慢遍历速度。

组合索引怎么写才真正生效?最左前缀不是玄学,是 B+ 树搜索路径的硬约束

建了 INDEX idx_user_role_status (role, status, created_at),以下查询能用上索引:

  • WHERE role = 'admin'
  • WHERE role = 'admin' AND status = 'active'
  • WHERE role = 'admin' AND status = 'active' AND created_at > '2025-01-01'
但这些不行:
  • WHERE status = 'active'(跳过最左列 role,无法定位子树)
  • WHERE role = 'admin' AND created_at > '2025-01-01'(中间缺失 statuscreated_at 无法利用有序性)
真正容易被忽略的是:如果经常按 status 单独查,又需要 role + status 联合查,不要盲目建两个单列索引——优先建 (status, role) 组合索引,再看执行计划是否覆盖全部场景;否则多索引会吃磁盘、拖慢写入,还可能让优化器选错索引。

索引不是建得越多越好,也不是建了就自动生效;它依赖你对查询模式、数据分布和 B+ 树工作方式的真实理解。一个没被 EXPLAIN 验证过的索引,和没建一样。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

679

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

372

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

286

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

519

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

263

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

392

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

537

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

638

2023.08.14

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

660

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.3万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 834人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号