mysql information_schema.TABLES表中的table_rows 字段值与count(*) 值不同
数据库的数据量怎么统计 (知乎): 连接
mysql获取数据库表数量和数据库表行数以及表数据量大小 - 寻梦99 - 博客园 (cnblogs.com)
SELECT table_name,table_rows FROM information_schema.tables WHERE TABLE_SCHEMA = 'chat_proxy' ORDER BY table_rows DESC;
select count(*) from chat_info;
执行得到的值是不相同的!那是因为:
(1)默认情况下 mysql 对表进行增删操作时,是不会自动更新 information_schema 库中 tables 表的 table_rows 字段的,在网上搜索一下发现说:只有10%的行数发生变化才会自动收集(没有亲自验证过!);
(2)执行 Analyze table tableName; 会统计所有表数据(在生产环境中不建议使用,因为会锁表!);
对于MyISAM才是正确的统计数据,但是对于InnoDB引擎的,可能与实际值相差 40% 到 50%,所以只是一个大概的统计
所以针对这种情况,要更改存储引擎,肯定是不太合适,因为InnoDB是默认的存储引擎,能支持事务外健,并发情况性能也比较好