COUNT的几种用法
- COUNT(expr),返回select语句检索行中expr的值不为NULL的数量,结果是一个BIGINT值
- 如果没有命中任何记录,返回0
- COUNT(*)统计时会包含值为NULL的行数
COUNT(*)的优化
- MyISAM:一个简单得优化,它把表的总行数单独记录下来,如果从一张表中使用COUNT(*)进行查询,就可以直接返回这个记录下来的数值就可以了
- InnoDB:应为innodb大部分操作是行级锁,所以不能用上面的缓存操作。所以InnoDB进行查询行数时,只是为了统计行数,会在扫表的过程中,选择一个成本较低的索引进行,大大节省空间。Mysql会选择最小的非聚簇索引来扫表。
COUNT(1)和COUNT(*)区别
- 对与COUNT(1)和COUNT(*)来说,mysql的优化是完全一样的,根本不存在谁比谁快
- 建议使用COUNT(*),因为这个是sql92中定义的标准统计行数的语法。
COUNT(字段)
- 查询比较简单粗暴,就是进行全表扫描,判断指定字段是否为NULL,不是NULL则累加。
- 多了一个判断NULL的操作,所以效率会比COUNT(*)慢
来源:CSDN
作者:white_zzZ
链接:https://blog.csdn.net/white_zzZ/article/details/104106558