MySQL索引管理:创建、删除与查看方法及性能优化

沿途有光
沿途有光
发布时间:2026-10-13| 4人浏览过
原创

在数据量较大的场景下,合理使用MySQL索引能将多表连接查询速度提升成千上万倍。本文梳理了基于ALTER TABLE和CREATE INDEX的索引创建语法、DROP INDEX的移除规则,以及利用SHOW INDEX观察索引统计数据的实操方法,帮助开发者高效进行数据库结构优化。

索引的性能价值

数据库索引的核心作用是加速WHERE子句满足条件的行搜索,并在多表连接时加快匹配速度。例如,三个未索引的表分别包含1000行数据且需进行等值连接时,无索引情况下需检查十亿种组合;而一旦建立索引,MySQL可直接定位并大幅减少扫描范围,实现百万级的性能提升。

创建索引的两种方式

第1步:使用ALTER TABLE添加索引

目的:对已有表补充普通、唯一(UNIQUE)或主键(PRIMARY KEY)索引。

入口/语法:

ALTER TABLE table_name ADD INDEX index_name (column_list);
ALTER TABLE table_name ADD UNIQUE (column_list);
ALTER TABLE table_name ADD PRIMARY KEY (column_list);

操作说明:若省略index_name,MySQL会自动根据首列生成名称。ALTER TABLE支持在一条语句中为多个表批量创建索引。需注意,一个表只能有一个PRIMARY KEY。

第2步:使用CREATE INDEX独立创建

目的:在不变更表结构定义的情况下,专门增加普通或唯一索引。

入口/语法:

CREATE INDEX index_name ON table_name (column_list);
CREATE UNIQUE INDEX index_name ON table_name (column_list);

注意事项:此方法无法用于创建PRIMARY KEY索引,且index_name必须显式指定。

删除与清理索引

第3步:移除不再需要的索引

目的:释放资源或修复误建索引。

操作与参数:

  • 标准删除:DROP INDEX index_name ON table_name;
  • 关联删除:ALTER TABLE table_name DROP INDEX index_name;
  • 主键专属:ALTER TABLE table_name DROP PRIMARY KEY;(无需指定名称)。

完成状态判断:若表内有UNIQUE索引但无PRIMARY KEY,直接执行主键删除将自动移除第一个UNIQUE索引。若某列被删除,涉及该列的所有索引部分都会同步失效;仅当组成索引的所有列都被物理删除时,整个索引才会消失。

查看索引详情与校验

第4步:读取索引统计数据

目的:确认索引存在性、存储类型(如BTREE)、重复限制及基数估计,以便评估查询优化潜力。

查询命令:

SHOW INDEX FROM tblname;
-- 或者使用同义词
SHOW KEYS FROM tblname;

关键字段解读:

  • Key_name:当前索引的名称。
  • Non_unique:值为0代表唯一(主键/唯一),1代表非唯一。
  • Index_type:显示底层算法,如BTREE、HASH或FULLTEXT。
  • Cardinality:唯一值的估算数量,可通过ANALYZE TABLE刷新以提升Optimizer的判断准确性。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。