Mysql 查询所有表的行数和大小



SELECT TABLE_NAME,TABLE_ROWS,DATA_LENGTH/1024/1024 "DATA_LENGTH",CREATE_TIME,TABLE_COLLATION FROM

 INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'lir' ORDER BY TABLE_ROWS DESC



[dss@localhost ~]$ mysql -u root -p  
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.6.16 MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show database;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| fire               |
| hive               |
| lir                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
7 rows in set (0.03 sec)

mysql> use fire;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> load data infile 'aa.txt' into table firewallb;
ERROR 13 (HY000): Can't get stat of '/var/lib/mysql/fire/aa.txt' (Errcode: 2 - No such file or directory)
mysql> load data infile '/home/dss/aa.txt' into table firewallb;
ERROR 13 (HY000): Can't get stat of '/home/dss/aa.txt' (Errcode: 13 - Permission denied)
mysql> load data infile '/tmp/aa.txt' into table firewallb;
Query OK, 10 rows affected (0.07 sec)
Records: 10  Deleted: 0  Skipped: 0  Warnings: 0

mysql> load data infile '/tmp/fireb.txt' into table firewallb;
Query OK, 16600931 rows affected (38 min 25.54 sec)
Records: 16600931  Deleted: 0  Skipped: 0  Warnings: 0

导入数据文件到mysql


mysql导出数据到文件

SELECT * INTO OUTFILE '/tmp/bb.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' FROM bb_month;

<think>嗯,我现在需要介绍一下如何在MySQL查询各个的数据行数。首先,我应该回想一下用户的问题,他们可能想知道不同方法来实现这个目标,以及每种方法的优缺点。用户可能没有说明他们使用的是哪个存储引擎,但InnoDBMyISAM在统计行数现不同,这一点很重要。 首先,我知道使用`SELECT COUNT(*)`是最直接的方法,但可能效率不高,特别是对于大来说,因为InnoDB需要全扫描。而MyISAM的话,这个查询会很快,因为它存储了行数。我需要提醒用户注意这一点。 然后,查询`information_schema.TABLES`可能是一个更高效的方法,特别是当需要获取多个行数时。这里需要注意,这个中的数据是近似值,尤其是对于InnoDB来说,可能不是实时更新的。用户可能需要定期分析来更新统计信息,比如执行`ANALYZE TABLE`命令。 接下来,可能需要提到存储过程或脚本的方法,用于批量生成查询语句,这样用户就不用手动一个个查了。比如使用`CONCAT`来生成多个`SELECT COUNT(*)`语句,然后执行这些语句。不过这种方法在很多的时候可能会比较麻烦,但可以通过生成SQL脚本来简化。 还有,用户可能关心准确性。如果他们需要精确的行数,即使速度慢,也应该使用`COUNT(*)`。而如果只是需要估计值,快速获取的话,`information_schema`的方法更合适。 另外,是否需要考虑权限问题?用户需要有访问`information_schema`的权限,以及执行`SELECT`权限在各个上。这也是需要注意的地方。 可能还需要提到,在MySQL的不同版本中,这些方法是否有所变化。比如,某些版本的`information_schema`中的统计信息更新频率是否有调整。但一般情况下,这些方法应该是通用的。 最后,总结一下步骤,分点说明每种方法的具体操作、适用场景以及注意事项。确保用户能够根据自身需求选择最合适的方法。比如,单精确行数用`COUNT(*)`,多快速估计用`information_schema`,批量处理用生成语句的方法。</think>在 MySQL查询数据行数主要有以下方法,根据场景可选择不同方案: 一、单精确统计(实时计算) ```sql SELECT COUNT(*) FROM 名; ``` - ✅ 优点:结果绝对精确 - ⚠️ 注意:InnoDB 引擎需要全扫描,大性能较差 - 💡 原理:实际遍历数据计数 二、快速统计所有(元数据估算) ```sql SELECT TABLE_SCHEMA AS 数据库名, TABLE_NAME AS 名, TABLE_ROWS AS 数据行数, DATA_LENGTH AS 数据大小, INDEX_LENGTH AS 索引大小 FROM information_schema.TABLES WHERE TABLE_SCHEMA = '你的数据库名'; ``` - ✅ 优点:毫秒级响应 - ⚠️ 注意:InnoDB 为估值(误差约 ±40%) - 🔄 刷新统计:执行 `ANALYZE TABLE 名;` 三、批量生成统计语句 ```sql SELECT CONCAT( 'SELECT "', TABLE_NAME, '" AS 名, COUNT(*) AS 行数 FROM ', TABLE_NAME, ' UNION ALL' ) FROM information_schema.TABLES WHERE TABLE_SCHEMA = '你的数据库名'; ``` - ✂️ 使用方法:复制输出结果后删除最后一个 `UNION ALL` - 💡 提示:适合需要精确统计多个的场景 四、存储引擎差异说明 1. **MyISAM**:`TABLE_ROWS` 完全准确 2. **InnoDB**:`TABLE_ROWS` 基于采样估算 3. **内存**:重启后统计会丢失 五、生产环境建议 1. 快速了解数据规模 → 使用元数据查询 2. 需要精确统计 → 使用 `COUNT(*)` + 定期缓存 3. 超大型 → 通过`EXPLAIN`获取近似值 示例:精确统计所有 ```sql SELECT TABLE_NAME AS 名, (SELECT COUNT(*) FROM 数据库名.TABLE_NAME) AS 行数 FROM information_schema.TABLES WHERE TABLE_SCHEMA = '你的数据库名'; ``` 注意事项: 1. 统计期间避免执行 `TRUNCATE TABLE` 或大量 DML 操作 2. 主从架构中,统计操作建议在从库执行 3. 8.0 版本后建议改用 `sys` schema 获取更详细统计信息
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值