Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

นับจำนวน Record ทุกตารางใน MySQL Database

ใช้ 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 แทน