Tôi có một cách tiếp cận rất tích cực bằng cách sử dụng SQL động mạnh mẽ
SET group_concat_max_len = 1024 * 1024 * 100;
SELECT CONCAT('SELECT * FROM (',GROUP_CONCAT(CONCAT('SELECT ',QUOTE(tb),' Tables_in_database,
COUNT(1) "Number of Rows" FROM ',db,'.',tb) SEPARATOR ' UNION '),') A;')
INTO @sql FROM (SELECT table_schema db,table_name tb
FROM information_schema.tables WHERE table_schema = DATABASE()) A;
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
Ví dụ: Trong cơ sở dữ liệu thử nghiệm của tôi, tôi nhận được điều này
mysql> use test
Database changed
mysql> SET group_concat_max_len = 1024 * 1024 * 100;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT CONCAT('SELECT * FROM (',GROUP_CONCAT(CONCAT('SELECT ',QUOTE(tb),' Tables_in_database,
'> COUNT(1) "Number of Rows" FROM ',db,'.',tb) SEPARATOR ' UNION '),') A;')
-> INTO @sql FROM (SELECT table_schema db,table_name tb
-> FROM information_schema.tables WHERE table_schema = DATABASE()) A;
Query OK, 1 row affected (0.00 sec)
mysql> PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
+--------------------+----------------+
| Tables_in_database | Number of Rows |
+--------------------+----------------+
| biblio | 3 |
| biblio_old | 7 |
| dep | 5 |
| e | 14 |
| emp | 4 |
| fruit | 12 |
| fruit_outoforder | 12 |
| nums_composite | 0 |
| nuoji | 4 |
| prod | 3 |
| prodcat | 6 |
| test2 | 9 |
| worktable | 5 |
| yoshi_scores | 24 |
+--------------------+----------------+
14 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql>
HÃY THỬ MỘT LẦN !!!
CAVEAT: Nếu tất cả các bảng là MyISAM, điều này sẽ xảy ra rất nhanh. Nếu tất cả các bảng là InnoDB, mỗi bảng sẽ được tính. Điều này có thể tàn bạo và không ngừng đối với các bảng InnoDB rất lớn.