https://geek-docs.com/mysql/mysql-ask-answer/356_mysql_how_can_i_rebuild_indexes_and_update_stats_in_mysql_innodb.html

MySQL如何在InnoDB中重建索引并更新统计数据?

在MySQL中,索引是非常重要的。索引可以加速查询,并且还可以检查唯一性。但是,索引的优化是需要花费一些时间和精力的。在InnoDB引擎中,索引是以B-Tree结构组织的,也就是说,索引在存储的时候是分离存储的。

InnoDB引擎会自动维护索引和统计数据,但是在一些特殊情况下,需要手动重建索引和更新统计数据。下面是一些常见的情况:

阅读更多:MySQL 教程

 

1.数据库重建

当你在一个新的服务器上安装了MySQL,并且需要将原来的数据库转移到新服务器时,需要将数据还原到新服务器,并且需要重建索引和更新统计数据。

2.表结构变更

当你在一个已有的表上进行结构变更时,例如增加或删除列,你需要重建索引和更新统计数据来保证查询的性能和正确性。

3.长时间未使用

如果你有一些长时间未使用的表,不妨定期对其进行重建索引和更新统计数据。

现在,我们来看看如何重建索引和更新统计数据:

重建索引

在InnoDB中,你可以使用ALTER TABLE语句来重建索引。这里有几种方法可供选择:

1.使用ALTER TABLE语句

ALTER TABLE table_name ENGINE=InnoDB;
Mysql
Copy

2.使用pt-online-schema-change工具

pt-online-schema-change是Percona Toolkit中的一个实用工具,可以在不影响应用程序的情况下进行表结构变更。

 

使用pt-online-schema-change可以避免重建索引引起的锁定表的操作。对于一些大型的表,pt-online-schema-change可以节省大量的时间。

3.使用mysqldump和mysql命令行实用程序

可以将表导出为SQL文件,然后重新导入,从而重建索引。

更新统计信息

在MySQL中,你可以使用ANALYZE TABLE语句或opt-in的InnoDB系统统计数据来更新索引统计数据。

使用ANALYZE TABLE语句

ANALYZE TABLE table_name;
Mysql
Copy

使用OPTIMIZE TABLE语句

OPTIMIZE TABLE table_name;
Mysql
Copy

可以在InnoDB中是重新创建表的副产品,它将重建表索引并更新统计数据。

总结

重建索引和更新统计信息是保证InnoDB引擎中索引性能和正确性的一种方法。在重建索引和更新统计信息之前,一定要充分备份你的数据库,以防万一。通过合适的方式和手段,时刻保持你的数据库健康和稳定。

[转帖]MySQL如何在InnoDB中重建索引并更新统计数据?的更多相关文章

  1. SQL Server重建索引与重组索引会更新统计信息吗?

    在SQL Server中重建索引(Rebuild Index)与重组索引(Reorganize Index)会触发统计信息更新吗? 那么我们先来测试.验证一下: 我们以AdventureWorks20 ...

  2. MySQL(四)InnoDB中一棵B+树能存多少行数据

    一.InnoDB一棵B+树可以存放多少行数据?(约2千万) 我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛.在计算机中磁盘存储数据最小单元是扇区,一个扇 ...

  3. mysql提取.sql备份文件中的单个表以及表数据

    背景:随着业务模块的不断在增多,数据库mysql容量也是越来越大,做测试时,整个备份还原比较耗费时间,由于有时候仅仅需要单个表或者少数几个表,要想从整个备份文件中提取指定的表以及数据,需要以下方法. ...

  4. MySQL之LEFT JOIN中使用ON和WHRERE对表数据

    背景 left join在我们使用mysql查询的过程中可谓非常常见,比如博客里一篇文章有多少条评论.商城里一个货物有多少评论.一条评论有多少个赞等等.但是由于对join.on.where等关键字的不 ...

  5. mysql在建表语句中添加索引

    普通索引创建 创建普通索引,即不添加 UNIQUE.FULLTEXT 等任何参数. [例]创建表名为 score 的数据表,并在该表的 id 字段上建立索引,SQL 语句如下: CREATE tabl ...

  6. pandas | 如何在DataFrame中通过索引高效获取数据?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是pandas数据处理专题的第四篇文章,我们一起来聊聊DataFrame中的索引. 上一篇文章当中我们介绍了DataFrame数据结构当 ...

  7. 「Elasticsearch」ES重建索引怎么才能做到数据无缝迁移呢?

    背景 众所周知,Elasticsearch是⼀个实时的分布式搜索引擎,为⽤户提供搜索服务.当我们决定存储某种数据,在创建索引的时候就需要将数据结构,即Mapping确定下来,于此同时索引的设定和很多固 ...

  8. 【mysql】关于innodb中MVCC的一些理解

    一.MVCC简介 MVCC (Multiversion Concurrency Control),即多版本并发控制技术,它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代 ...

  9. 如何在Anaconda中把python环境更新更高版本

    把Anaconda中的python从3.5.5更新到3.6版本,不想卸载重新安装.办法如下: 开始->Anaconda Promot 在Anaconda Promot中,输入: conda up ...

  10. MySQL 查询某个列中同样值的数量统计

    数据如今是这种,我想确定出type列中的news和image....甚至以后有其它值,他们分别有多少个. SELECT type, count(1) AS counts FROM material G ...

随机推荐

  1. 技巧:在Excel或Word中将回车替换掉

    一.在Excel中替换 将回车替换为逗号或其他字符,如下面的屏幕截图所示. 1. 在 查找和替换 对话框中 查找内容 字段,请按 Ctrl + J 键,然后在 更换 字段中,键入所需的字符,在这种情况 ...

  2. Aware依赖注入管理

    1.Aware介绍 在Spring当中有一些内置的对象是未开放给我们使用的,例如Spring的上下文ApplicationContext.环境属性Environment,BeanFactory等等其他 ...

  3. MySQL基础篇:第八章_详解TCL语言

    事务 一.含义 事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行 二.特点(ACID) A 原子性:一个事务是不可再分割的整体,要么都执行要么都不执行 C 一致性:一个 ...

  4. 【玩转鲲鹏 DevKit系列】如何快速迁移无源码应用?

    本文分享自华为云社区<[玩转鲲鹏 DevKit系列]如何快速迁移无源码应用?>,作者: 华为云社区精选. 为了帮助广大用户和开发者快速将无源码应用从 x86 迁移到鲲鹏,鲲鹏 DevKit ...

  5. 当你运行npm run命令时,会发生什么?

    摘要:今天我们来聊一聊运行npm run命令之后会发生什么. 本文分享自华为云社区<运行npm run命令的时候会发生什么?>,作者:gentle_zhou . 先前发了一篇"运 ...

  6. 开心档之CSS 测验

    ​ 目录 CSS 测验 ​编辑 CSS 测验 CSS测验是一种衡量前端开发人员对CSS的熟练程度的测试.通过CSS测验,可以评估一个人对CSS语言的掌握程度和应用能力,帮助公司或招聘方挑选合适的人才. ...

  7. Axure 多平台自适应

    步骤一:设置自适应视图 1.新建两个页面分别命名为"PC版"和"移动版" 2.启动自适应视图: 条件为大于等于,宽为1024,继承于基本视图3.新建自适应视图& ...

  8. SpringBoot 配置 Swagger

    Profile Config 多环境不同配置 1.添加 Pom 文件 <dependency> <groupId>io.springfox</groupId> &l ...

  9. 在DataGrid中实现Button Command绑定

    在DataGrid中实现Button Command绑定 Command="{Binding editCommand}" 会默认查找UserList中对象的属性,而你的UserLi ...

  10. .Net Core 开发框架,支持多版本的类库

    工具:Visual Studio 2019 1.新建一个 .NET Standard 类库. 2.填写项目名称 3.编辑项目文件 可以看到当前类库默认为 netstandard2.0,而此时其xml标 ...