MYSQL查询表中数据数量
查询表中的数据量是在开发中经常使用到的,这里记录几个知识点。
这里使用user_info表举例
- 表结构如下:
字段名称 | 类型 | 是否可以为NULL | 注释 |
---|---|---|---|
id | int | 是 | id |
name | varchar(255) | 是 | 真实姓名 |
password | varchar(255) | 是 | 密码 |
salt | varchar(255) | 是 | 盐值 |
username | varchar(255) | 是 | 用户名 |
- 表数据(下面数据中的NULL代表是空,不是NULL字符串):
id | name | password | salt | username |
---|---|---|---|---|
1 | 张三 | 951cd60dec2104024949d2e0b2af45ae | 11 | zhangsan |
NULL | NULL | NULL | NULL | NULL |
2 | 李四 | 967cd60dec2104024949d2e0b2af45ae | 22 | lisi |
用COUNT去查询
当使用COUNT(*)时,它将计算所有行的数量,包括包含NULL值的行。
当使用COUNT(字段名称)时,它将计算所有行的数量,但不包括所有字段值都为NULL的行。
SELECT COUNT(*) FROM user_info;
SELECT COUNT(id) FROM user_info;
去information_schema.TABLES表中查询
可以去information_schema.TABLES表中查询表的数据量,查询时需要注意,这个表中的数据不是实时的,也就是说查询出的值可能会和真实的数量不一样。大家可能会问,既然数量不一直,那我查询这个表干嘛呢,直接count不就行了,既然存在,就必定有它用武之地。
我最近就碰到一个场景:领导让我查询下生产环境几张表的数据量,不用很准确,只要一个大差不差的数字就可以,我的第一反应是使用count,可是突然想到生产环境啊,这几张表的数据又都是比较大的,我查询时必定占用数据库资源啊,万一影响了客户体验咋整,本着客户至上的原则,我就去information_schema.TABLES表中统计了下数量,不影响客户,又完成了我的工作,嗯,貌似不错的样子。
-- 这里test是数据库名称,test1是表名
SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'test1';