You are using the InnoDB engine and the innodb_file_per_table option is set. You delete a significant numberof rows of a large table named FACTORY.INVENTORY.Which command will reorganize the physical storage of table data and associated index data for the INVENTORYtable, in order to reduce storage space and improve I/O efficiency?A)CHECK TABLE FACTORY.INVENTORYB)ANALYZE TABLE FACTORY.INVENTORYC)OPTIMIZE TABLE FACTORY.INVENTORYD)mysqlcheck -u root -p FACTORY.INVENTORYE)mysqldump -u root -p FACTORY INVENTORY
A) CHECK TABLE FACTORY.INVENTORY
错误。该命令用于检查表是否存在数据或索引损坏等错误,主要目的是验证表的完整性,而非重组物理存储。
B) ANALYZE TABLE FACTORY.INVENTORY
错误。该命令用于分析表的索引统计信息(如索引分布、数据密度),帮助优化器生成更优的查询执行计划,但不会修改表的物理存储结构。
C) OPTIMIZE TABLE FACTORY.INVENTORY
正确。 对于 InnoDB 引擎(且innodb_file_per_table开启时),删除大量数据后,表的物理空间(如.ibd文件)不会自动收缩,未使用的空间会被标记为"可重用" 但不会释放。
OPTIMIZE TABLE会通过重建表的方式(等价于ALTER TABLE ... FORCE),重新组织数据和索引的物理存储,回收未使用的空间并优化布局,从而减少存储占用并提升 I/O 效率。这是题目要求的正确操作。
D) mysqlcheck -u root -p FACTORY.INVENTORY
错误。这是 MySQL 的命令行工具,主要功能是检查、修复或优化表(类似CHECK TABLE和OPTIMIZE TABLE的组合)。但题目问的是"命令",而mysqlcheck是外部工具,且需要添加optimize参数才可以进行表碎片处理及优化效果。
E) mysqldump -u root -p FACTORY INVENTORY
错误。 这是备份工具,用于导出表数据,不会修改原表的物理存储结构。
2.1 替代方案
手动重建表:
ALTER TABLE FACTORY.INVENTORY ENGINE=InnoDB;
使用 mysqlcheck 工具(需明确参数):
mysqlcheck -u root -p --optimize FACTORY INVENTORY
2.2 小结
对于InnoDB表,OPTIMIZE TABLE 实际上执行 ALTER TABLE ... ENGINE=InnoDB,这会重建表数据文件和索引,释放因删除大量数据产生的碎片空间
重组后数据的物理存储及索引更紧凑,减少磁盘 I/O 开销,提升查询效率
注意:大表优化期间会生成临时文件(如 #sql-*.ibd),需确保磁盘空间充足
提醒:使用 SHOW PROCESSLIST 监控操作进度,避免高峰时段执行

MySQL数据库BUG导致查询不到本该查到的数据
MySQL源码学习系列(一)-- 环境准备及常用命令
MySQL源码学习系列(二)--面试高频问题:general log、slowlog记录顺序
MySQL数据库修改小众参数解决大众问题
MySQL8.0 双密码机制:解决应用程序用户不停机修改密码问题
MySQL8.0.40编译安装
DBA面试题:MySQL缓存池LRU算法做了哪些改进?
慢SQL探秘之为什么我的SQL很慢却没记录在慢查询日志里
MySQL数据恢复







