任务二 删除索引
知识点
1. 为什么需要删除索引?
答:创建索引之后,对数据的添加、修改、删除等操作会使索引页出现碎片,影响数据查询性能。为了提高查询效率,数据库管理员需要定期对索引进行相应的维护,其中包括删除和修改索引。不再使用的索引也应该及时删除,因为索引会占用存储空间并降低数据更新操作的性能。
2. 删除索引有哪几种方法?
答:MySQL中删除索引有两种方法:
- 使用
ALTER TABLE 表名 DROP INDEX 索引名;语句 - 使用
DROP INDEX 索引名 ON 表名;语句
3. ALTER TABLE语句删除索引的语法格式是什么?
答:使用ALTER TABLE语句删除索引的语法格式:
ALTER TABLE 表名 DROP INDEX 索引名;
例如:ALTER TABLE Speciality DROP INDEX SY_Spename; 删除Speciality表上名为SY_Spename的索引。
4. DROP INDEX语句的语法格式是什么?
答:使用DROP INDEX语句删除索引的语法格式:
DROP INDEX 索引名 ON 表名;
例如:DROP INDEX SY_FT_Speciality ON student; 删除student表上名为SY_FT_Speciality的索引。
5. 如何查看表上的索引信息?
答:使用 SHOW INDEX FROM 表名; 语句查看表上的索引信息。例如:
SHOW INDEX FROM Speciality;
如果表中没有索引,返回Empty set;如果有索引,则显示索引的详细信息(包括索引名、字段名、索引类型、索引方法等)。
6. 删除表中的列时,该列上的索引会怎样?
答:删除表中的列时,会自动删除与该列相关的索引信息:
- 若待删除的列为索引的组成部分,则该列会从索引中删除
- 若组成索引的所有列都被删除,则整个索引将被删除
7. ALTER TABLE DROP INDEX和DROP INDEX有什么区别?
答:两种方法在功能上没有本质区别,都能删除指定索引:
ALTER TABLE 表名 DROP INDEX 索引名:将删除索引作为ALTER TABLE语句的一部分DROP INDEX 索引名 ON 表名:使用独立的DROP INDEX语句删除索引
两者都需要指定索引名和表名,执行后都会从表中永久移除指定的索引。
8. 删除主键索引的方法是什么?
答:由于CREATE INDEX语句不能创建主键索引,删除主键索引也不能使用DROP INDEX语句,需要使用ALTER TABLE语句:
ALTER TABLE 表名 DROP PRIMARY KEY;
注意:如果主键列同时是AUTO_INCREMENT的,需要先移除AUTO_INCREMENT属性,否则无法删除主键索引。
9. 索引维护的主要内容是什么?
答:索引维护的主要内容包括:
- 定期检查索引碎片:数据增删改操作会产生索引碎片,影响查询效率
- 删除不再使用的索引:避免不必要的存储开销和更新性能损失
- 重建索引:对于碎片较多的索引,可以删除后重新创建
- 监控索引使用情况:确保索引被有效使用,不被冗余索引拖慢更新速度
10. 删除索引时需要注意什么?
答:删除索引时的注意事项:
- 删除索引前应确认该索引确实不再被使用,否则可能影响查询性能
- 删除主键索引需要使用ALTER TABLE DROP PRIMARY KEY,不能用DROP INDEX
- 删除表中的列会自动删除该列相关的索引
- 删除索引是不可恢复操作(除非有事务保护),应谨慎操作
- 删除索引后会释放该索引占用的存储空间