暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL OCP试题解析(5)

数据库干货铺 2025-05-14
189




Q1: 重组表的物理存储以释放空间并优化I/O效率
     You are using the InnoDB engine and the innodb_file_per_table option is set. You delete a significant number
    of rows of a large table named FACTORY.INVENTORY.
    Which command will reorganize the physical storage of table data and associated index data for the INVENTORY
    table, in order to reduce storage space and improve I/O efficiency?
    A)CHECK TABLE FACTORY.INVENTORY
    B)ANALYZE TABLE FACTORY.INVENTORY
    C)OPTIMIZE TABLE FACTORY.INVENTORY
    D)mysqlcheck -u root -p FACTORY.INVENTORY
    E)mysqldump -u root -p FACTORY INVENTORY
    1.  选项解析

    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.  补充及小结

    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 监控操作进度,避免高峰时段执行




        往期精彩回顾
        扫码关注     


        文章转载自数据库干货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论