码迷,mamicode.com
首页 > 数据库 > 详细

MySQL的COUNT函数

时间:2019-10-23 11:26:26      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:inno   sql92   扫描   全表扫描   字段名   定义   区别   支持   记录   

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函数

标签:inno   sql92   扫描   全表扫描   字段名   定义   区别   支持   记录   

原文地址:https://www.cnblogs.com/qiaoqianshitou/p/11725135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!