ANALYZE命令主要的作用是对表进行分析操作,其主要的作用包括以下几点:
更新表的统计信息;
针对ANALYZE命令的作用1,值得注意的是,MySQL数据库中表的统计信息是保存在INFORMATION_SCHEMA.TABLES表中,用户可以通过以下两个命令查询表的统计信息:
SHOW TABLE STATUS LIKE ‘table_name’;
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ‘table_name’;
但是,INFORMATION_SCHEMA.TABLES表中存储的信息并不是实时的表统计信息,而是缓存统计信息,缓存时间由information_schema_stats_expiry参数控制。该参数默认值为86400秒,即一天。使用ANALYZE命令可以使MySQL强制更新INFORMATION_SCHEMA.TABLES表中存储的信息。
在插入新数据之前,对测试表pdcr的真实记录行数,如下所示:
在插入新数据之前,查询测试表pdcr的统计信息,如下图所示:
在向测试表插入300万行数据(原数据量的3倍),查看测试表的真实记录行数,如下图所示:
在向测试表插入300万行数据(原数据量的3倍),查看测试表的统计信息,如下图所示。可以看到统计信息仍然没有更新,这是由于统计信息并不是实时生成的,而是使用的缓存的统计信息。
当使用ANALYZE命令中指定的表名使用大写情况下,返回信息显示更新表统计信息成功:
但是实际该表的统计信息并没有得到更新,如下图所示:
当使用ANALYZE命令中指定的表名使用小写情况下,返回信息显示更新表统计信息成功:
并且此时ANALYZE命令成功更新了表的统计信息,如下图所示: