MySQL命令
MySQL 表分析检查与修复
MySQL本身提供了一系列关于表的分析、检查与优化命令: - ①分析表:分析表中键的分布,如主键、唯一键、外键等是否合理。 - ②检查表:检查表以及表的数据文件是否存在错误。 - ③修复表:当一个表的数据或结构文件损坏时,可以修复表结构(仅支持MyISAM表)。 - ④优化表:消除delete、update语句执行时造成的空间浪费。 ### 分析表 语法如下: ```sql analyze [local | no_write_to_binlog] table 表名1; ``` 其中的可选参数local、no_write_to_binlog代表是否将本条SQL记录进bin-log日志,默认情况下是记录的,加上这两个参数中的其中一个后则不会记录,执行效果如下:  如果Msg_text显示的是OK,则代表这张表的键不存在问题。 ### 检查表 语法如下: ```sql check table 表名1,表名2... [检查选项]; ``` 分析、检查、优化、修复的命令都支持同时操作多张表,不同的表之间只需用,逗号隔开即可。检查命令有多个可选项,如下: - quick:不扫描行数据,不检查链接错误,仅检查表结构是否有问题。 - fast:只检查表使用完成后,是否正确关闭了表文件的FD文件描述符。 - changed:从上述检查过的位置开始,只检查被更改的表数据。 - medium:检查行数据,收集每一行数据的键值(主键、外键...),并计算校验和,验证数据是否正确。 - extended:对每行数据的所有字段值进行检查,检查完成后可确保数据100%正确。 看看执行结果如下:  这回的结果出现了些许不同,Msg_text中出现了一个Error信息,提示咱们检查的zz_u表不存在,而对于一张存在的zz_users表,则返回OK,表示没有任何问题。 ### 修复表 语法如下: ```sql repair [local | no_write_to_binlog] table 表名 [quick] [extended] [use_frm]; ``` 默认情况下,修复表的命令不支持InnoDB引擎,仅支持MyISAM、CSV、引擎,比如基于InnoDB引擎的表执行修复命令时,会提示"选择的表其引擎并不支持修复命令"。 可以在my.ini/my.conf文件中加一行配置:[mysqld]innodb_force_recovery = 1,这样在启动时会强制恢复InnoDB的数据。 >上述这个修复机制默认是不开启的,因为InnoDB不需要这个恢复机制,InnoDB有完善的事务和持久化机制,客户端提交的事务都会持久化到磁盘,除非你人为损坏InnoDB的数据文件,否则基本上不会出现InnoDB数据损坏的情况。 ### 优化表 语法如下: ```sql optimize [local | no_write_to_binlog] table 表名; ``` 这里值得一提的是:此优化非彼优化,并不意味着你的表存在性能问题、执行后它会自动调优,而是指清除老数据。 其实删除一条数据本质上并不会立马从磁盘移除,而是会先改掉隐藏的删除标识位,执行这条优化命令后,MySQL会将一些已经delete过的数据彻底从磁盘删除,从而释放这些“废弃数据”占用的空间。
顶部
收展
底部
[TOC]
目录
MySQL基础操作命令
MySQL 库相关命令
MySQL 表相关命令
MySQL 表分析检查与修复
MySQL 增删改查语句
MySQL 数据库函数
MySQL 索引相关命令
MySQL 事务与锁相关的命令
MySQL 存储过程、存储函数与触发器
MySQL用户与权限管理
MySQL视图与临时表
MySQL导出导入与备份还原
MySQL表分区相关命令
MySQL系统变量
相关推荐
MySQL教程
MySQL索引
MySQL事务
MySQL锁机制
MySQL版本特性