如何在 MySQL 中添加索引后重建现有 table 中的索引?
How to rebuild indexes in an existing table after adding index in MySQL?
我有一个 table,在 MySQL 中有 50k 行,最近添加了一个新索引。当我 运行 (显示我 table 中每个索引的大小)时:
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 会自动索引现有的 table 或我是否必须使用 OPTIMIZE TABLE
或类似命令手动重新索引它?我正在使用 InnoDB(版本 5.7.26)。
就速度而言,它似乎根本没有提高我的查询性能,这就是为什么我认为重建索引是必要的。
Does this mean that MySQL automatically indexes the existing table when I create a new index?
是的,确实如此。它扫描 table 中的现有数据并相应地创建索引。如果您正在创建 unique
索引,它还会确保数据满足唯一性约束,如果不满足则失败。
Do I have to reindex it manually with OPTIMIZE TABLE
?
新创建的索引可能不会立即受益 optimize table
。这样做可能仍然是个好主意,因为该命令会重新组织 table 本身以及其他索引(如果有)的存储。
创建索引也会建立索引。索引创建数据定义语言被认为是online DDL.
我有一个 table,在 MySQL 中有 50k 行,最近添加了一个新索引。当我 运行 (显示我 table 中每个索引的大小)时:
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 会自动索引现有的 table 或我是否必须使用 OPTIMIZE TABLE
或类似命令手动重新索引它?我正在使用 InnoDB(版本 5.7.26)。
就速度而言,它似乎根本没有提高我的查询性能,这就是为什么我认为重建索引是必要的。
Does this mean that MySQL automatically indexes the existing table when I create a new index?
是的,确实如此。它扫描 table 中的现有数据并相应地创建索引。如果您正在创建 unique
索引,它还会确保数据满足唯一性约束,如果不满足则失败。
Do I have to reindex it manually with
OPTIMIZE TABLE
?
新创建的索引可能不会立即受益 optimize table
。这样做可能仍然是个好主意,因为该命令会重新组织 table 本身以及其他索引(如果有)的存储。
创建索引也会建立索引。索引创建数据定义语言被认为是online DDL.