数据库中count语句解读

COUNT的几种用法

  1. COUNT(expr),返回select语句检索行中expr的值不为NULL的数量,结果是一个BIGINT值
  2. 如果没有命中任何记录,返回0
  3. COUNT(*)统计时会包含值为NULL的行数

COUNT(*)的优化

    MyISAM:一个简单得优化,它把表的总行数单独记录下来,如果从一张表中使用COUNT(*)进行查询,就可以直接返回这个记录下来的数值就可以了 InnoDB:应为innodb大部分操作是行级锁,所以不能用上面的缓存操作。所以InnoDB进行查询行数时,只是为了统计行数,会在扫表的过程中,选择一个成本较低的索引进行,大大节省空间。Mysql会选择最小的非聚簇索引来扫表。

COUNT(1)和COUNT(*)区别

    对与COUNT(1)和COUNT(*)来说,mysql的优化是完全一样的,根本不存在谁比谁快 建议使用COUNT(*),因为这个是sql92中定义的标准统计行数的语法。

COUNT(字段)

    查询比较简单粗暴,就是进行全表扫描,判断指定字段是否为NULL,不是NULL则累加。 多了一个判断NULL的操作,所以效率会比COUNT(*)慢
经验分享 程序员 微信小程序 职场和发展