阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1100|回复: 0

[转帖] ANALYZE 和 CHECK

[复制链接]
  • TA的每日心情
    开心
    2012-3-7 10:15
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2012-1-12 09:55:30 | 显示全部楼层 |阅读模式
    ANALYZE TABLE 和 CHECK TABLE 分别用来进行表分析和表检查。表分析主要用来获得关键字的分布情况,对执行计划的产生有帮助,而表检查主要用来检查表或者视图是否存在错误。
    ANALYZE TABLE 用来分析和存储表的关键字的分布,使得系统获得准确的统计信息,影响 SQL 的执行计划的生成。对于数据基本没有发生变化的表,是不需要经常进行表分析的。但是如果表的数据量变化很明显,用户感觉实际的执行计划和预期的执行计划不同的时候,执行一次表分析可能有助于产生预期的执行计划。
    表分析的语法是:
    ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
    这个命令对 MyISAM 、 BDB 、 InnoDB 存储引擎的表有作用。对于 MyISAM 存储引擎的表,这个命令的执行效果与 myisamchk – a 的执行效果相当。
    下面是对表 test.test3 进行表分析的例子:
    mysql> analyze table test3;
    +------------+---------+----------+----------+
    | Table | Op | Msg_type | Msg_text |
    +------------+---------+----------+----------+
    | test.test3 | analyze | status | OK |
    +------------+---------+----------+----------+
    1 row in set (0.14 sec)
    CHECK TABLE 的作用是检查表或者视图是否存在错误,对 MyISAM 和 InnoDB 存储引擎的表有作用。对于 MyISAM 存储引擎的表进行表检查,也会同时更新关键字统计数据。
    检查表的语法是:
    CHECK TABLE tbl_name [, tbl_name] ... [option] ... option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
    下面我们的例子介绍的是当视图中引用的列被删除以后,检查视图会提示错误:
    首先创建基于 test3 表的视图 test3_view :
    mysql> desc test3;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id | int(3) | NO | PRI | NULL | |
    | name | varchar(64) | NO | | | |
    | age | int(11) | YES | | NULL | |
    +-------+-------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    mysql> create view test3_view as select id,name,age from test3;
    Query OK, 0 rows affected (0.03 sec)
    检查视图 test3_view ,没有发现问题:
    mysql> check table test3_view;
    +-----------------+-------+----------+----------+
    | Table | Op | Msg_type | Msg_text |
    +-----------------+-------+----------+----------+
    | test.test3_view | check | status | OK |
    +-----------------+-------+----------+----------+
    1 row in set (1.50 sec)
    删除 test3 表的 age 列:
    mysql> alter table test3 drop column age;
    Query OK, 862560 rows affected (5.69 sec)
    Records: 862560 Duplicates: 0 Warnings: 0
    再进行表检查,则会提示错误:
    mysql> check table test3_view G
    *************************** 1. row ***************************
    Table: test.test3_view
    Op: check
    Msg_type: Error
    Msg_text: Unknown column 'test.test3.age' in 'field list'
    *************************** 2. row ***************************
    Table: test.test3_view
    Op: check
    Msg_type: Error
    Msg_text: View 'test.test3_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.test3_view
    Op: check
    Msg_type: error
    Msg_text: Corrupt
    3 rows in set (0.00 sec)
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表