ใช้ TABLE_ROWS จาก INFORMATION_SCHEMA.TABLES ร่วมกับ SUM()
นับ Record รวมทั้ง Database
mysql> SELECT SUM(TABLE_ROWS)
-> FROM INFORMATION_SCHEMA.TABLES
-> WHERE TABLE_SCHEMA = 'business';
+-----------------+ | SUM(TABLE_ROWS) | +-----------------+ | 450 | +-----------------+
นับ Record แยกตามตาราง
mysql> SELECT TABLE_NAME, TABLE_ROWS
-> FROM INFORMATION_SCHEMA.TABLES
-> WHERE TABLE_SCHEMA = 'business';
ผลลัพธ์ (บางส่วน):
+-------------------------------+------------+ | TABLE_NAME | TABLE_ROWS | +-------------------------------+------------+ | add1daydemo | 2 | | student | 2 | | last10recordsdemo | 12 | | randoptimizedemo | 26 | | ... (209 tables total) | ... | +-------------------------------+------------+
ข้อควรระวัง: TABLE_ROWS เป็นค่าประมาณ (Estimate)
- MyISAM: แม่นยำ (เก็บ Count ไว้)
- InnoDB: ประมาณการจาก Sampling (อาจคลาดเคลื่อน ±10%+)
- ค่าจริง: ต้อง
SELECT COUNT(*) FROM table_name
Query ได้ค่าจริงทุกตาราง (Dynamic SQL)
SELECT CONCAT('SELECT ''', TABLE_NAME, ''' AS tbl, COUNT(*) FROM `', TABLE_SCHEMA, '`.`', TABLE_NAME, '`;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'business';
→ Copy Output มา Run ได้ Count จริงทุกตาราง
Performance: COUNT(*) บนตารางใหญ่ InnoDB ช้า (Full Scan) ควรใช้ Trigger/Maintain Counter Table หรือ Approximate Count จาก TABLE_ROWS แทน