news 2026/7/10 12:11:45

MySQL 系统学习 第四阶段:MySQL 高级 第一节:索引(Index)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 系统学习 第四阶段:MySQL 高级 第一节:索引(Index)

一、为什么需要索引?

先看一个问题。

假设用户表:

CREATE TABLE user( id BIGINT, username VARCHAR(50), age INT );

数据:

id username age 1 Tom 20 2 Jack 25 3 Lucy 18 ... 10000000 Mike 30

现在执行:

SELECT * FROM user WHERE username='Tom';

没有索引时

MySQL 怎么查?

只能:

第一条 ↓ 第二条 ↓ 第三条 ↓ ... ↓ 1000万条

这种方式叫:

全表扫描(Full Table Scan)

时间复杂度:

O(n)

数据越多:

越慢。


有索引时

例如:

给 username 创建索引:

CREATE INDEX idx_username ON user(username);

MySQL 会建立类似:

索引结构 Tom | 位置 | 数据行

查询:

WHERE username='Tom'

可以快速定位。

时间复杂度:

O(log n)

二、什么是索引?

定义:

索引是数据库为了提高查询效率而创建的一种数据结构。

简单理解:

索引 = 数据目录。


现实例子:

没有目录的书:

找 MySQL章节 翻第一页 翻第二页 ... 翻500页

有目录:

目录 MySQL ↓ 第300页

快速定位。

数据库索引也是类似思想。


三、MySQL 常见索引类型

1. 普通索引(普通查询)

语法:

CREATE INDEX idx_name ON user(name);

作用:

提高查询速度。


2. 唯一索引

保证数据唯一。

例如:

手机号:

CREATE UNIQUE INDEX idx_phone ON user(phone);

保证:

13800000001

不能重复。


3. 主键索引

创建主键:

PRIMARY KEY(id)

MySQL 自动创建索引。

例如:

id BIGINT PRIMARY KEY

4. 联合索引 ⭐⭐⭐⭐⭐

多个字段组成索引。

例如:

CREATE INDEX idx_name_age ON user(name, age);

表示:

同时根据:

name + age

建立索引。


四、索引的数据结构

MySQL 常用:

B+Tree

这是重点。

为什么不用:

  • 数组?
  • 链表?
  • 二叉树?

而选择:

B+Tree?


1. 数组

查询:

快:

O(1)

但是:

插入删除慢。


2. 链表

查询:

慢:

O(n)

3. 二叉树

如果数据:

1 \ 2 \ 3 \ 4

会退化成链表。


4. B+Tree

结构:

50 / \ 20 80 / \ / \ 10 30 60 90 数据存储在叶子节点

特点:

  • 高度低
  • 查询快
  • 适合磁盘
  • 范围查询优秀

所以 MySQL InnoDB 使用 B+Tree。


五、索引创建和删除

创建

CREATE INDEX idx_user_name ON user(username);

查看索引

SHOW INDEX FROM user;

删除索引

DROP INDEX idx_user_name ON user;

六、什么时候应该创建索引?

适合:

1. 经常查询字段

例如:

WHERE username='Tom'

2. 经常排序

例如:

ORDER BY create_time DESC

3. 经常关联

例如:

JOIN user ON order.user_id=user.id

4. 外键字段

例如:

order.user_id

七、索引是不是越多越好?

不是。

这是面试高频问题。

原因:


① 占用空间

索引也是数据。

例如:

10GB数据 + 多个索引 可能增加几GB

② 降低写入速度

INSERT:

原来:

写数据

有索引:

写数据 + 更新索引

UPDATE:

修改字段:

可能需要更新索引。


DELETE:

删除数据:

同时删除索引记录。


所以:

索引提高查询速度,但是降低写入性能。


八、本节总结

内容说明
索引提高查询速度的数据结构
无索引全表扫描
有索引快速定位
MySQL索引结构B+Tree
主键自动创建索引
唯一索引保证唯一
联合索引多字段索引
索引缺点占空间、降低写性能

🎯 本节核心一句话:

索引就是数据库的数据目录,通过空间换时间,让查询从扫描大量数据变成快速定位数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 12:10:10

基于PD-NOMA和turbo编译码的智能反射面系统matlab性能仿真

目录 1.前言 2.算法测试效果图预览 2.1系统仿真参数 2.2系统仿真结果 3.算法运行软件版本 4.算法理论概述 4.1 PD-NOMA基本原理 4.2 IRS信道基础模型 4.3 Turbo编译码 4.4 系统优势 5.算法完整程序工程 1.前言 智能反射面(IRS,Intelligent Reflecting S…

作者头像 李华
网站建设 2026/7/10 12:08:30

ModuleNotFoundError 深度排查:从 dotenv 到 Python 4种包管理工具路径冲突

Python模块导入深度排查:从dotenv到多工具环境冲突解决方案 1. 理解ModuleNotFoundError的本质 ModuleNotFoundError是Python开发中最常见的错误之一,它揭示了Python解释器在模块搜索路径中无法找到指定模块的问题。当遇到 ModuleNotFoundError: No mo…

作者头像 李华
网站建设 2026/7/10 12:06:10

9款主流网盘直链下载助手LinkSwift:免费获取真实下载地址的完整指南

9款主流网盘直链下载助手LinkSwift:免费获取真实下载地址的完整指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移…

作者头像 李华
网站建设 2026/7/10 12:05:46

影刀RPA PPT自动生成:用数据驱动演示文稿

title: “影刀RPA PPT自动生成:用数据驱动演示文稿” date: 2026-07-01 author: 林焱 影刀RPA PPT自动生成:用数据驱动演示文稿 每周周报要做PPT,月度总结要做PPT,数据图表要截图贴进PPT……这种重复劳动最适合自动化。影刀配合p…

作者头像 李华
网站建设 2026/7/10 12:03:45

Caffe 1.0 深度学习框架:与同名咖啡馆的 3 个关键历史渊源与技术命名趣谈

Caffe 1.0 深度学习框架:与同名咖啡馆的 3 个关键历史渊源与技术命名趣谈 在技术领域,命名往往蕴含着比表面更丰富的故事。当伯克利的研究团队在2013年首次发布Caffe深度学习框架时,很少有人会想到这个名称背后隐藏着一段与咖啡文化交织的学术…

作者头像 李华
网站建设 2026/7/10 11:59:53

Codex本地化智能编码实战:从环境搭建到多Agent系统开发

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在尝试将大语言模型集成到本地开发环境时,发现很多工具要么配置复杂,要么功能单一。直到接触到 Codex&…

作者头像 李华