kri*_*egu 3 mysql innodb information-schema
我目前正在从 SQL Server 迁移到 MySQL。当我尝试匹配行数时,我会查询 information_Schema.tables。我注意到迁移的信息和源信息之间存在一些差异。
但是,我做了一个select count(*) from table;给了我正确的行数
为什么information_Schema.tables.table_rows和之间有区别select count(*) from table?
根本原因是存储引擎。InnoDB 不会更新information_schema.tables.table_rows列。
我有旧帖子进一步解释了这一点
Apr 23, 2012:为什么在 SELECT COUNT(*) ... 的聚集索引上选择二级索引?May 16, 2012:为什么 InnoDB 不存储行数?Mar 03, 2014:获取mysql表总条目数的最有效方法您可以使用SHOW INDEXES FROM表格获得近似值
如果您想计算当前数据库中的所有表而不管存储引擎如何,只需运行以下命令:
SET group_concat_max_len = 1024*1024*1024;
SELECT GROUP_CONCAT(sqltocount SEPARATOR ' UNION ') sqlcount INTO @sql
FROM (SELECT CONCAT('SELECT ''',table_name,''' tablename,COUNT(1) RowCount
FROM ',table_name) sqltocount FROM (SELECT table_name FROM
information_schema.tables WHERE table_schema=DATABASE()) AA) A;
SELECT @sql\G PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
Run Code Online (Sandbox Code Playgroud)
试一试 !!!
| 归档时间: |
|
| 查看次数: |
1618 次 |
| 最近记录: |