2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > mysql查询表总记录数_mysql_notes_查看表的总记录数count()

mysql查询表总记录数_mysql_notes_查看表的总记录数count()

时间:2024-02-10 18:09:00

相关推荐

mysql查询表总记录数_mysql_notes_查看表的总记录数count()

查看数据库中表的总记录数

这里提供三种方法,前两种用于数据量比较大的表,查看表的大概总记录数结果(可能不是非常准确)。

总记录数-查看数据库中表的状态

SELECT TABLE_NAME,TABLE_ROWS,table_comment FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='table_name';

总记录数-查看单表的状态

show table status where Name='table_name';

总记录数-count()

COUNT(expr) ,返回SELECT语句检索的行中expr的值不为NULL的数量。结果是一个BIGINT值。

执行计划

InnoDB引擎&不加where条件的情况下

InnoDB通过遍历最小的可用二级索引来处理SELECT COUNT()语句,除非索引或优化器提示指示优化器使用其他索引。如果二级索引不存在,InnoDB通过扫描聚集索引来处理SELECT COUNT()语句

当只有聚簇索引id时,count (1)&count(*)&count(id) 走聚簇索引,count(其他字段)扫描全表;

当有二级索引时,count (1)&count(*)&count(索引字段) 一般都是走二级索引(优化器会选一个占空间小的索引,聚簇索引包含信息多占空间大),count(其他字段)扫描全表;

MySQL会优先选择最小的非聚簇索引来扫表。优化的前提是查询语句中不包含where条件和group by条件。

MySQL官方文档这么说:

InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.

测试脚本

explain SELECT count(id) from base_category; -- 全表记录数

explain SELECT count(feature) from base_category;

-- 等价于

explain SELECT count(id) from base_category where feature is not null;

所以,

对于count(1)和count(),MySQL的优化是完全一样的,根本不存在谁更快!count (1)比count( )性能好的说法在新版本中不科学了

count(主键字段)不一定走主键索引

count(字段)需要进行字段的非NULL判断,所以效率会低一些。

建议使用count(*),因为这是SQL92定义的标准统计行数的语法。

测试数据库版本5.6.20

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。