在MySQL中添加索引后如何在现有表中重建索引?

问题描述

我在MySQL中有一个具有5万行的表,最近又添加了一个新索引。当我运行时(显示表中每个索引的大小):

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自动为现有表建立索引?

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

我是否必须使用OPTIMIZE TABLE手动为其重新编制索引?

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

,

创建索引也将建立索引。索引创建数据定义语言被视为online DDL.

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...