select|select count(column) 、 select count(*) 和 select count(1) 的区别
有次在统计页面的某个数值时,发现数据总会漏算,后面才知道,select (*)和select (column)是有区别的。
PS:菜是原罪啊!
COUNT() 的作用
据《高性能MySQL》一书记载:
COUNT( ) 有两种非常不同的作用:它可以统计某个列值的数量;也可以统计行数。总结:
在统计列值是如 count(column) 要求列值是非空的,也就是不统计 NULL。
如果在 COUNT()中指定某个列,如 (column),结过则为这个表达式有值的结果数据,不包含 NULL。
select count(column) 对 特定的列 的值具有的行数进行计算,不包含 NULL 值。
select count(*) 对 行 的数目进行计算,包含 NULL。
当然,select count(1) 和 select count(*) 的结果是一样的。
性能
MyISAM 的 COUNT( ) 函数,只有在没有 Where 的条件下才非常快。因为此时MySQL 可以直接利用存储引擎的特性直接获得这个值。1.任何情况下SELECT COUNT(*) FROM tablename是最优选择;
反过来说,当统计某个列值的数量时,语句带 Where , 那么 MyISAM 的 COUNT( ) 的性能与其他引擎再无区别
2.尽量减少SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种查询;
3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出现。
- 如果表没有主键,那么 count(1) 比 count(*) 快。
- 如果有主键,那么 count(主键,联合主键) 比 count(*) 快。
- 如果表只有一个字段,count(*)最快。
推荐阅读
- Spring|Spring Boot之ImportSelector
- performSelectorOnMainThread:withObject:waitUntilDone:参数设置为NO或YES的区别
- 2019年PB|2019年PB County Senior Open, 保龄生涯(64)
- CountDownLatch-线程并发的发令枪
- select|select bell
- SQL优化(二)|SQL优化(二) 快速计算Distinct Count
- 24、CountIF函数和CountIFS函数
- 算法笔记(1)|算法笔记(1)| 排序
- python基础-numpy.bincount详解
- select函数socket编程