`

MySQL定期分析检查与优化表

 
阅读更多


定期分析表

ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name]


本语句用于分析和存储表的关键字分布。在分析期间,使用一个读取锁定对表进行锁定。这对于MyISAM, BDB和InnoDB表有作用。对于MyISAM表,本语句与使用myisamchk -a相当。

MySQL使用已存储的关键字分布来决定,当您对除常数以外的对象执行联合时,表按什么顺序进行联合。

mysql> analyze table a;
+--------+---------+----------+-----------------------------+
| Table  | Op      | Msg_type | Msg_text                    |
+--------+---------+----------+-----------------------------+
| test.a | analyze | status   | Table is already up to date | 
+--------+---------+----------+-----------------------------+
1 row in set (0.00 sec)


定期检查表

CHECK TABLE tbl_name [, tbl_name]  [option] 

option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}


检查一个或多个表是否有错误。CHECK TABLE对MyISAM和InnoDB表有作用。对于MyISAM表,关键字统计数据被更新。

mysql> check table a;
+--------+-------+----------+----------+
| Table  | Op    | Msg_type | Msg_text |
+--------+-------+----------+----------+
| test.a | check | status   | OK       | 
+--------+-------+----------+----------+
1 row in set (0.00 sec)


CHECK TABLE也可以检查视图是否有错误,比如在视图定义中被引用的表已不存在。
我们为上面的表a创建一个视图

mysql> create view a_view as select * from a;
Query OK, 0 rows affected (0.02 sec)


然后CHECK一下该视图,发现没有问题

mysql> check table a_view;
+-------------+-------+----------+----------+
| Table       | Op    | Msg_type | Msg_text |
+-------------+-------+----------+----------+
| test.a_view | check | status   | OK       | 
+-------------+-------+----------+----------+
1 row in set (0.00 sec)


现在删掉视图依赖的表

mysql> drop table a;
Query OK, 0 rows affected (0.01 sec)


再CHECK一下刚才的视图,发现报错了

mysql> check table a_view\G;
*************************** 1. row ***************************
   Table: test.a_view
      Op: check
Msg_type: Error
Msg_text: Table 'test.a' doesn't exist
*************************** 2. row ***************************
   Table: test.a_view
      Op: check
Msg_type: Error
Msg_text: View 'test.a_view' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
*************************** 3. row ***************************
   Table: test.a_view
      Op: check
Msg_type: error
Msg_text: Corrupt
3 rows in set (0.00 sec)

ERROR: 
No query specified


定期优化表

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] 


如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。您可以使用OPTIMIZE TABLE来重新利用未使用的空间,并整理数据文件的碎片。
在多数的设置中,您根本不需要运行OPTIMIZE TABLE。即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次即可,只对特定的表运行。
OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。
对于MyISAM表,OPTIMIZE TABLE按如下方式操作:
如果表已经删除或分解了行,则修复表。
如果未对索引页进行分类,则进行分类。
如果表的统计数据没有更新(并且通过对索引进行分类不能实现修复),则进行更新。

mysql> OPTIMIZE table a;
+--------+----------+----------+-----------------------------+
| Table  | Op       | Msg_type | Msg_text                    |
+--------+----------+----------+-----------------------------+
| test.a | optimize | status   | Table is already up to date | 
+--------+----------+----------+-----------------------------+
1 row in set (0.00 sec)


****
需要注意的是无论是ANALYZE,CHECK还是OPTIMIZE在执行期间将对表进行锁定,因此请注意这些操作要在数据库不繁忙的时候执行

****

分享到:
评论

相关推荐

    MySQL性能分析与优化调整

    2. **EXPLAIN分析**:通过在SQL语句前添加`EXPLAIN`关键字,可以查看查询执行计划,分析表扫描方式、索引使用情况等,帮助优化查询结构。 3. **性能_schema**:MySQL 5.5及以上版本引入了性能_schema模块,用于收集...

    分析MySQL中优化distinct的技巧

    在MySQL数据库中,优化`DISTINCT`操作是一个关键的性能提升策略,特别是在处理大量数据时。上述场景中,用户遇到了一个问题:对一个10G以上的单表`user_access_xx_xx`执行`SELECT COUNT(DISTINCT nick)`以统计唯一...

    mysql弱口令检查方法

    通过上述分析,我们可以了解到MySQL弱口令检查的重要性以及如何通过编写简单的Shell脚本来实现这一目标。此外,还介绍了一些与MySQL用户管理、密码安全策略相关的知识点。希望本文能够帮助大家更好地理解和掌握MySQL...

    实现MySQL定时批量检查表repair和优化表optimize table的shell脚本

    本文介绍mysql定时批量检查表repair和优化表optimize table的shell脚本,对于MySQL数据库的定期维护相当有用!如下所示: #!/bin/bash host_name=192.168.0.123 user_name=jincon.com user_pwd=jincon.com database...

    MySQL GUI Tools MYSQL优化工具

    5. **性能监控与分析**: 使用MySQL提供的Performance Schema或第三方工具(如Percona Toolkit),收集并分析性能指标,识别性能问题,如锁等待、慢查询等。 6. **定期维护**: 定期进行数据库维护,如重建索引、清理...

    mysql查询优化之索引优化

    - **监控和分析**:定期检查EXPLAIN计划,分析索引的使用情况,使用MySQL的性能分析工具如pt-query-digest来识别慢查询并优化。 - **InnoDB存储引擎的索引优化**:InnoDB支持行级锁定,其主键索引是聚簇索引,其他...

    MySQL索引分析和优化.pdf

    ### MySQL索引分析与优化详解 #### 一、引言 在现代数据库管理系统中,索引扮演着极其重要的角色。合理的索引设计不仅能显著提升查询性能,还能优化数据的存储结构,进而提高整个系统的响应速度。本文将深入探讨...

    MYSQL.rar_MYSQL_mysql 优化_mysql优化_mysql备份_sql优化

    定期检查和调整这些设置,以保持数据库的最佳性能。 4. 硬件优化:考虑使用更快的硬盘(如SSD)、足够的内存以及适合处理高并发的处理器。合理的硬件配置可以显著提升MySQL的响应速度。 二、MySQL备份 1. 完全备份...

    尚硅谷mysql高级:索引、优化

    7. 使用EXPLAIN分析查询:理解查询执行计划,检查是否使用了索引,是否存在全表扫描等问题。 8. 触发器和存储过程:虽然可以简化代码,但过度使用可能降低性能。谨慎使用,确保它们不会成为性能瓶颈。 9. 定期维护...

    mysql的sql优化

    定期分析和优化表结构(ANALYZE TABLE)和重建索引(OPTIMIZE TABLE)也有助于保持数据库的良好运行状态。 在实际工作中,结合日志分析(如慢查询日志)和性能监控工具(如MySQL Performance Schema或Percona ...

    mysql性能的优化

    ### MySQL性能优化详解 #### 一、什么是MySQL优化? MySQL优化是指通过合理安排资源和调整系统参数,使得MySQL运行得更快、更节省资源的过程。优化的目的在于减少系统瓶颈,降低资源消耗,提升系统的响应速度。 #...

    MySQL 中如何优化表释放表空间

    合理利用`OPTIMIZE TABLE`和`ALTER TABLE`命令,结合定期检查表的大小和数据分布,可以帮助减少存储成本,提升数据库性能。在进行这些操作时,务必考虑系统的工作负载和数据安全性,确保操作的平稳进行。

    MySQL优化、问题案例分析

    4. **定期维护索引**:定期检查并更新索引统计信息,必要时重建索引以保持其高效性。 5. **限制查询范围**:尽可能缩小查询范围,例如使用LIMIT等关键字减少返回结果的数量,以减轻服务器负担。 6. **合理设计表结构...

    mysql的索引优化

    3. **索引维护**:定期检查并优化索引结构也是必要的,以确保索引始终处于高效状态。 #### 六、案例分析 以一个简单的表`people`为例,其结构如下: ```sql CREATE TABLE people ( peopleid SMALLINT NOT NULL ...

    mysql高级优化查询

    #### 3.3 数据库监控与分析 定期监控数据库性能指标,并使用工具如 MySQL 的 slow query log 和 performance schema 进行性能分析,找出性能瓶颈。 通过上述对 MySQL 高级优化查询的深入解析,我们不仅了解了查询...

    mysql表优化、分析、检查和修复的方法详解

    除了优化,`mysqlcheck`也可以用于分析表: ```bash # 分析单个表 mysqlcheck -a 数据库名 表名 -uroot -p密码 # 分析多个表 mysqlcheck -a 数据库名 表名1 表名2 -uroot -p密码 # 分析整个数据库 mysql...

Global site tag (gtag.js) - Google Analytics