MySqL-day4_03(索引)

索引-index


一、创建索引

sql 复制代码
create index 索引名称 on 表名(字段名称(长度));
  • 如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致。
  • 字段类型如果不是字符串,可以不填写长度部分。

例 1:为表 students 的 age 字段创建索引,名为 age_index。

sql 复制代码
create index age_index on students (age);

例 2:为表 students 的 name 字段创建索引,名为 name_index。

sql 复制代码
create index name_index on students (name(10));

▲ 索引的调用

索引的调用是数据库自动完成的,不需要我们在 SQL 语句中显式专门的指令来 "调用" 索引。

当你执行查询语句 时,数据库的查询优化器会自动判断是否可以使用已有的索引来加速查询,并选择最合适的索引执行。

(这里会自动调用 age_index)


二、查看索引

sql 复制代码
show index from 表名;

例 1:查看 students 表的所有索引

sql 复制代码
show index from students;

这条命令会返回一个详细的列表,其中几个关键列的含义是:

  • Key_name: 索引的名称。
  • Column_name: 被索引的列名。
  • Non_unique: 1 表示非唯一索引(允许重复值),0 表示唯一索引(不允许重复值)。
  • Key_len: 索引使用的字节数。
  • Index_type: 索引的类型,如 BTREE (最常见)。

三、删除索引

sql 复制代码
DROP INDEX 索引名称 ON 表名;

例 1:删除 students 表的索引 age_index

sql 复制代码
DROP INDEX age_index ON students;

四、索引优缺点

优点 ✅

  • 极大提升查询速度:这是最主要的优点。当你查询 WHERE age = 20 时,数据库可以直接去 "目录"(索引)里找,而不用一本本翻书(全表扫描)。
  • 加速关联查询(JOIN):当两张表通过某个字段关联时,在关联字段上建立索引可以显著提高连接效率。
  • 保证数据唯一性:通过创建 唯一索引(UNIQUE INDEX),可以强制要求某列的值不重复,这是实现数据完整性的一种方式。
  • 优化排序和分组:如果 ORDER BY 或 GROUP BY 的字段上有索引,数据库通常可以直接利用索引的有序性来完成操作,避免了额外的排序开销。

缺点 ❌

  • 减慢写入速度:每次执行 INSERT, UPDATE, DELETE 操作时,数据库不仅要修改数据,还要同步更新相关的索引文件,这会带来额外的开销。
  • 占用磁盘空间:索引本身也是一种数据结构,需要占用额外的存储空间。一张表上的索引越多,占用的空间就越大。
  • 并非万能:不是所有查询都能用到索引。例如,对索引列使用函数、进行模糊查询(如 %keyword)等情况,可能会导致索引失效。
相关推荐
空杆推不起1 分钟前
穿透数据库 JOIN 核心:语法分类、底层算法、生产优化与高频坑点全解析
数据库·oracle
xxwl58510 分钟前
数据库后端接口测试报告
spring boot·mysql·tomcat
xqqxqxxq37 分钟前
MySQL 数据类型笔记
数据库·笔记·mysql
Logintern091 小时前
理解MySQL数据库的“事务与锁”
数据库·mysql
朱容zr3331331 小时前
为什么推荐使用自增主键?使用UUID作为主键的优缺点是什么?
java·运维·数据库·后端·mysql·面试·性能优化
麻瓜code1 小时前
【Redis 】数据类型、持久化与过期删除
数据库·redis·缓存
空杆推不起2 小时前
穿透 Flink CDC 表层用法:数据库日志捕获机制、Flink Source 运行时、端到端一致性底层原理详解
大数据·数据库·flink
朱容zr3331332 小时前
请解释“回表”的概念。
java·前端·数据库
大黄说说2 小时前
EF Core 避坑指南:查询慢、循环查询、并发更新问题如何解决
java·服务器·数据库
城管不管2 小时前
重生——第五次面试2026.8.1一面
java·数据库·后端·ai·面试·职场和发展·agent