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)等情况,可能会导致索引失效。
相关推荐
倔强的石头_7 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北2 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12023 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端