ฉันมีวิธีการก้าวร้าวมากโดยใช้กำลังพลวัต Dynamic SQL
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;
ตัวอย่าง: ในฐานข้อมูลทดสอบของฉันฉันได้รับสิ่งนี้
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>
ให้มันลอง !!!
ถ้ำ: ถ้าตารางทั้งหมดเป็น MyISAM สิ่งนี้จะเกิดขึ้นเร็วมาก หากตารางทั้งหมดเป็น InnoDB แต่ละตารางจะถูกนับ นี่อาจเป็นเรื่องที่โหดร้ายและไม่ยอมทำตามสำหรับตาราง InnoDB ที่มีขนาดใหญ่มาก