MySQL的COUNT函数
Posted 桥前石头
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL的COUNT函数相关的知识,希望对你有一定的参考价值。
COUNT()函数主要用于统计表行数,主要用法是COUNT( * )、COUNT(1)和COUNT(字段名)。
因为COUNT( * )是SQL92定义的标准统计行数的语法,所以mysql对它进行了很多优化。
MyISAM不支持事务,MyISAM中的锁是表级锁InnoDB支持事务,支持行级锁。MyISAM表级锁,所以同张表上的操作是串行的,所以MyISAM做了个优化,把表的总行数单独记录下来供COUNT( * )查询[表级锁,不会有并发的数据库行数修改,得到的行数是准确的]。而InnoDB支持事务,其中大部分操作是行级锁,所以表的行数可能被并发修改,就不缓存记录总行数了而是扫表,InnoDB中索引分聚簇索引和非聚簇索引,聚簇索引的叶子节点中保存整行记录,而非聚簇索引的叶子节点保存的是该行记录的主键的值。扫表的时候选择最小的非聚簇索引。
当然,这些优化的前提是没有进行where和group的条件查询。
InnoDB中COUNT( *)和COUNT(1)实现上没有区别,而且效率一样。但是COUNT(字段名)需要进行全表扫描,然后进行字段非NULL判断,所以效率更低。
以上是关于MySQL的COUNT函数的主要内容,如果未能解决你的问题,请参考以下文章