2020年8月30日星期日

Mysql之:count(*)、count(常量)、count(字段)的区别

count函数暗藏很多玄机,学习之前先尝试回答以下几个问题吧:

> 1、COUNT有几种用法?> 2、COUNT(字段名)和COUNT(*)的查询结果有什么不同?> 3、COUNT(1)和COUNT(*)之间有什么不同?> 4、COUNT(1)和COUNT(*)之间的效率哪个更高?> 5、为什么《阿里巴巴Java开发手册》建议使用COUNT(*)> 6、MySQL的MyISAM引擎对COUNT(*)做了哪些优化?> 7、MySQL的InnoDB引擎对COUNT(*)做了哪些优化?> 8、上面提到的MySQL对COUNT(*)做的优化,有一个关键的前提是什么?> 9、SELECT COUNT(*) 的时候,加不加where条件有差别吗?> 10、COUNT(*)、COUNT(1)和COUNT(字段名)的执行过程是怎样的?

一、COUNT(字段)、COUNT(常量)和COUNT(*)之间的区别?

> count(常量)和count(*)表示的是直接查询符合条件的数据库表的行数。> count(列名)表示的是查询符合条件的列的值不为NULL的行数。

二、关于COUNT(*)和COUNT(1)

MySQL官方文档这么说:

InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.
> 所以,对于count(1)和count(*),MySQL的优化是完全一样的,根本不存在谁更快!> 但依旧建议使用count(*),因为这是SQL92定义的标准统计行数的语法。

三、关于COUNT(字段)

> 进行全表扫描,判断指定字段的值是否为NULL,不为NULL则累加。> 性能比count(1)和count(*)慢。

总结:

> COUNT函数的用法,主要用于统计表行数。主要用法有COUNT(*)、COUNT(字段)和COUNT(1)。> 在InnoDB中COUNT(*)和COUNT(1)实现上没有区别,而且效率一样,但是COUNT(字段)需要进行字段的非NULL判断,所以效率会低一些。> 因为COUNT(*)是SQL92定义的标准统计行数的语法,并且效率高,所以请直接使用COUNT(*)查询表的行数!

 

Mysql之:count(*)、count(常量)、count(字段)的区别黄钻商品与诚信店铺敦煌网站c2c模式亚马逊站内推广之营销推广口述:女邻居爱爱太高调每晚都叫如何去解决亚马逊卖家遇到的一些常见问题亚马逊广告教学与优化视频(亚马逊新手必备)爆款预测:推荐在亚马逊备受欢迎的5款玩具!

没有评论:

发表评论