【问题标题】:How to rebuild indexes in an existing table after adding index in MySQL?在 MySQL 中添加索引后如何重建现有表中的索引?
【发布时间】:2020-10-17 12:59:51
【问题描述】:

我在 MySQL 中有一个包含 50k 行的表,最近添加了一个新索引。当我运行时(显示表中每个索引的大小):

SELECT database_name, table_name, index_name,
ROUND(stat_value * @@innodb_page_size / 1024 / 1024, 2) size_in_mb
FROM mysql.innodb_index_stats
WHERE table_name = 'table_name' and stat_name = 'size' 
ORDER BY size_in_mb DESC;

它显示我新创建的索引为 1.5 mb。这是否意味着当我创建新索引时 MySQL 会自动索引现有表,或者我必须使用 OPTIMIZE TABLE 或类似命令手动重新索引它?我正在使用 InnoDB(版本 5.7.26)。

在速度方面,它似乎根本没有提高我的查询性能,这就是为什么我认为重新索引是必要的。

【问题讨论】:

    标签: mysql indexing innodb reindex


    【解决方案1】:

    创建索引也会构建索引。索引创建数据定义语言考虑online DDL.

    【讨论】:

      【解决方案2】:

      这是否意味着当我创建新索引时 MySQL 会自动索引现有表?

      是的,确实如此。它扫描表中的现有数据并相应地创建索引。如果你正在创建一个unique 索引,它还可以确保数据满足唯一性约束,如果不满足,则失败。

      我是否必须使用 OPTIMIZE TABLE 手动重新索引它?

      新创建的索引可能不会立即使optimize table 受益。这样做可能仍然是个好主意,因为该命令会重新组织表本身以及其他索引(如果有)的存储。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多