数据库中count语句解读

浪子不回头ぞ 提交于 2020-01-30 23:58:08

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(*)慢
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!