patternsqlMinor
Information schema not showing reliable information?
Viewed 0 times
showingreliablenotschemainformation
Problem
I'm currently migrating from SQL Server to MySQL. When i try to match the number of rows i query information_Schema.tables. I noticed that there are some differences between the migrated information and the source information.
However, I did a
Why is there a difference between the
However, I did a
select count(*) from table; gave me the correct number of rowsWhy is there a difference between the
information_Schema.tables.table_rows and the select count(*) from table?Solution
The root cause is the storage engine. InnoDB does not update the
I have old posts that explain this further
You can get an approximation using
If you would like to count all the tables in your current database regardless of the storage engine, just run this:
GIVE IT A TRY !!!
information_schema.tables.table_rows column.I have old posts that explain this further
Apr 23, 2012: Why is a secondary index chosen over a clustered index for SELECT COUNT(*) ...?
May 16, 2012: Why doesn't InnoDB store the row count?
Mar 03, 2014: The most efficient method to obtain the total entries into a mysql table
You can get an approximation using
SHOW INDEXES FROM against the tableIf you would like to count all the tables in your current database regardless of the storage engine, just run this:
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;GIVE IT A TRY !!!
Code Snippets
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;Context
StackExchange Database Administrators Q#107247, answer score: 5
Revisions (0)
No revisions yet.