本文目录导读:

MySQL 统计脚本
统计所有表的数据量
-- 统计所有表的行数(精确)
SELECT
TABLE_NAME,
TABLE_ROWS,
DATA_LENGTH/1024/1024 AS 'Data Size (MB)',
INDEX_LENGTH/1024/1024 AS 'Index Size (MB)'
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_database_name'
ORDER BY TABLE_ROWS DESC;
生成统计所有表的SQL
-- 生成统计SQL
SELECT CONCAT(
'SELECT "', table_name, '" AS table_name, COUNT(*) AS row_count FROM ',
table_name, ' UNION ALL '
) AS query_part
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_database_name';
-- 然后复制结果去掉最后一个UNION ALL执行
Shell脚本批量统计
#!/bin/bash
# mysql_count.sh
HOST="localhost"
USER="root"
PASS="password"
DB="your_database"
mysql -h$HOST -u$USER -p$PASS -D$DB -e "
SELECT
table_name,
engine,
table_rows,
ROUND(data_length/1024/1024, 2) AS 'data_size_mb',
ROUND(index_length/1024/1024, 2) AS 'index_size_mb'
FROM information_schema.tables
WHERE table_schema = '$DB'
ORDER BY table_rows DESC;
"
PostgreSQL 统计脚本
-- 统计所有表的数据量
SELECT
schemaname,
tablename,
n_live_tup AS row_count,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS total_size
FROM pg_stat_user_tables
WHERE schemaname = 'public'
ORDER BY n_live_tup DESC;
-- 精确统计(推荐)
DO $$
DECLARE
tbl RECORD;
total BIGINT;
BEGIN
FOR tbl IN
SELECT tablename FROM pg_tables
WHERE schemaname = 'public'
LOOP
EXECUTE 'SELECT COUNT(*) FROM ' || tbl.tablename INTO total;
RAISE NOTICE 'Table: %, Rows: %', tbl.tablename, total;
END LOOP;
END $$;
SQL Server 统计脚本
-- 统计所有表的数据量
SELECT
t.name AS table_name,
p.rows AS row_count,
ROUND(SUM(a.total_pages) * 8 / 1024, 2) AS 'total_size_mb'
FROM sys.tables t
INNER JOIN sys.indexes i ON t.object_id = i.object_id
INNER JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
WHERE t.is_ms_shipped = 0
GROUP BY t.name, p.rows
ORDER BY p.rows DESC;
Oracle 统计脚本
-- 统计所有表的数据量
SELECT
table_name,
num_rows,
ROUND(blocks * 8 / 1024, 2) AS 'size_mb'
FROM user_tables
ORDER BY num_rows DESC;
-- 需要先收集统计信息
BEGIN
DBMS_STATS.GATHER_SCHEMA_STATS(
ownname => 'YOUR_SCHEMA',
estimate_percent => 100
);
END;
/
Python 通用脚本
# count_db_data.py
import mysql.connector
import psycopg2
import pandas as pd
def count_mysql_tables(config):
"""统计MySQL所有表数据量"""
conn = mysql.connector.connect(**config)
cursor = conn.cursor()
cursor.execute("""
SELECT table_name, table_rows,
ROUND(data_length/1024/1024, 2) as data_mb,
ROUND(index_length/1024/1024, 2) as index_mb
FROM information_schema.tables
WHERE table_schema = %s
ORDER BY table_rows DESC
""", (config['database'],))
tables = cursor.fetchall()
conn.close()
return tables
def count_all_tables_exact(conn_info):
"""精确统计所有表行数"""
conn = mysql.connector.connect(**conn_info)
cursor = conn.cursor()
cursor.execute("SHOW TABLES")
tables = [row[0] for row in cursor.fetchall()]
results = []
for table in tables:
cursor.execute(f"SELECT COUNT(*) FROM {table}")
count = cursor.fetchone()[0]
results.append((table, count))
print(f"Table: {table}, Rows: {count:,}")
conn.close()
return results
# 使用示例
config = {
'host': 'localhost',
'user': 'root',
'password': 'password',
'database': 'your_database'
}
# 执行统计
tables_info = count_mysql_tables(config)
for table in tables_info:
print(f"Table: {table[0]:30} Rows: {table[1]:>10,} Data: {table[2]:>8.2f}MB Index: {table[3]:>8.2f}MB")
批量统计脚本
Shell脚本 - 多数据库统计
#!/bin/bash
# batch_db_count.sh
databases=("db1" "db2" "db3")
USER="root"
PASS="password"
for db in "${databases[@]}"; do
echo "========== Database: $db =========="
mysql -u$USER -p$PASS -D$db -e "
SELECT
CONCAT(table_schema, '.', table_name) AS 'Table',
table_rows AS 'Rows',
ROUND(data_length/1024/1024, 2) AS 'Data(MB)'
FROM information_schema.tables
WHERE table_schema = '$db'
ORDER BY table_rows DESC;
"
done
实时监控脚本
# monitor_db_size.py
import time
import mysql.connector
from datetime import datetime
def monitor_table_growth(config, interval=3600):
"""实时监控表数据增长"""
conn = mysql.connector.connect(**config)
cursor = conn.cursor()
while True:
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cursor.execute("""
SELECT table_name, table_rows
FROM information_schema.tables
WHERE table_schema = %s
ORDER BY table_rows DESC
""", (config['database'],))
print(f"\n=== 数据统计 {timestamp} ===")
for table in cursor.fetchall():
print(f"{table[0]:30} {table[1]:>10,} rows")
print(f"\n等待 {interval} 秒后重新统计...")
time.sleep(interval)
conn.close()
使用建议
- 性能考虑:对大型表使用
COUNT(*)可能很慢,考虑使用information_schema或定期更新统计信息 - 精确性:
information_schema中的TABLE_ROWS是估计值,需要精确值请使用COUNT(*) - 自动化:可以设置cron job定期执行统计脚本
- 日志记录:建议将统计结果记录到日志或专门统计表中
选择哪种方法取决于您的数据库类型、数据量大小和精确度要求,对于大多数场景,information_schema方法已经足够。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播