MySqL-day4_03(索引)
索引-index
- 一、创建索引
- 二、查看索引
- 三、删除索引
- 四、索引优缺点
一、创建索引
create index 索引名称 on 表名(字段名称(长度));
- 如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致。
- 字段类型如果不是字符串,可以不填写长度部分。
例 1:为表 students 的 age 字段创建索引,名为 age_index。
create index age_index on students (age);
例 2:为表 students 的 name 字段创建索引,名为 name_index。
create index name_index on students (name(10));
▲ 索引的调用
索引的调用是数据库自动完成的,不需要我们在 SQL 语句中显式专门的指令来 “调用” 索引。
当你执行查询语句时,数据库的查询优化器会自动判断是否可以使用已有的索引来加速查询,并选择最合适的索引执行。
(这里会自动调用 age_index)
二、查看索引
show index from 表名;
例 1:查看 students 表的所有索引
show index from students;
这条命令会返回一个详细的列表,其中几个关键列的含义是:
- Key_name: 索引的名称。
- Column_name: 被索引的列名。
- Non_unique: 1 表示非唯一索引(允许重复值),0 表示唯一索引(不允许重复值)。
- Key_len: 索引使用的字节数。
- Index_type: 索引的类型,如 BTREE (最常见)。
三、删除索引
DROP INDEX 索引名称 ON 表名;
例 1:删除 students 表的索引 age_index
DROP INDEX age_index ON students;
四、索引优缺点
优点 ✅
- 极大提升查询速度:这是最主要的优点。当你查询 WHERE age = 20 时,数据库可以直接去 “目录”(索引)里找,而不用一本本翻书(全表扫描)。
- 加速关联查询(JOIN):当两张表通过某个字段关联时,在关联字段上建立索引可以显著提高连接效率。
- 保证数据唯一性:通过创建 唯一索引(UNIQUE INDEX),可以强制要求某列的值不重复,这是实现数据完整性的一种方式。
- 优化排序和分组:如果 ORDER BY 或 GROUP BY 的字段上有索引,数据库通常可以直接利用索引的有序性来完成操作,避免了额外的排序开销。
缺点 ❌
- 减慢写入速度:每次执行 INSERT, UPDATE, DELETE 操作时,数据库不仅要修改数据,还要同步更新相关的索引文件,这会带来额外的开销。
- 占用磁盘空间:索引本身也是一种数据结构,需要占用额外的存储空间。一张表上的索引越多,占用的空间就越大。
- 并非万能:不是所有查询都能用到索引。例如,对索引列使用函数、进行模糊查询(如 %keyword)等情况,可能会导致索引失效。