首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Java 實現獲取 MySQL 數據庫所有表記錄總數的兩種高效方案

     編輯:MySQL 資料庫相關知識

方案一:遍歷 SHOW TABLES + COUNT(*)


// 1. 獲取所有表名
List<String> tables = new ArrayList<>();
ResultSet rs = stmt.executeQuery("SHOW TABLES");
while (rs.next()) tables.add(rs.getString(1));

// 2. 逐表 COUNT(*)
long sum = 0;
for (String tbl : tables) {
  ResultSet rs2 = stmt.executeQuery("SELECT COUNT(*) FROM " + tbl);
  if (rs2.next()) sum += rs2.getLong(1);
}

優點:邏輯直觀;缺點:大量表時網路往返多、耗時長。

方案二:查詢 information_schema.TABLES(推薦)


String sql = "SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES " +
             "WHERE TABLE_SCHEMA = ? ORDER BY TABLE_ROWS DESC";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, dbName);
ResultSet rs = ps.executeQuery();
long sum = 0;
while (rs.next()) sum += rs.getLong("TABLE_ROWS");

優點:單次查詢、無需鎖表、秒級返回。注意:TABLE_ROWS 為統計估算值(InnoDB),非精確值;精確統計仍需 COUNT(*)。

完整 Java 類結構

  • startMySQLConn():載入驅動、建立連線
  • getTables() / useDB():獲取表名或切換至 information_schema
  • getDbSum():核心統計邏輯
  • closeMySQLConn():釋放資源

最佳實踐建議

  • 日常監控、容量規劃 → 方案二(TABLE_ROWS)。
  • 審計、對賬需精確值 → 方案一(COUNT(*)),可並行化加速。
  • 連線池、預編譯、資源關閉務必規範,避免洩漏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved