专栏首页arebirth重生者的IT之路count(*) count(id) count(1) count(字段)

count(*) count(id) count(1) count(字段)

最近在研究Mysql的时候针对这几个的效率问题,就此查了一些文章,总结了一下。


count(id)   InnoDB引擎会遍历整张表,把每一行行的id值全部取出来,返回给server层,server层拿到id后,判断是不可能为空的,就按行累加。 count(1)   InnoDB引擎遍历整张表,但不取值,server层对于返回的每一行,放一个数字 1 进去,判断是不可能为空的,累计增加。 count(字段)   1.如果这个字段是定义为not null的话,一行行地从记录里面读出这个字段,判断不能为null,按行累加   2.如果这个字段定义允许为null的话,判断到有可能是null,还要把值取出来在判断一下,不是null才累加。 count(*)   不会把全部的字段取出来,而是做专门的优化,不取值,count(*)肯定不是null,按行累加。

总结:count(*)>count(1)>count(id)>count(字段)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [MySQL]sql语句count操作效率排序count(*) count(1) count(主键id) count(字段)

    结论: count(*)>count(1)>count(主键id)>count(字段)

    陶士涵
  • MySQL count()函数及其优化count(1),count(*),count(字段)区别

    JavaEdge
  • 数据库COUNT(*)、COUNT(字段)和COUNT(1)的异同

    关于数据库中行数统计,无论是MySQL还是Oracle,都有一个函数可以使用,那就是COUNT。

    Java那些事儿
  • count(*) count(1)与count(col)的区别

    count(*) 和count(1) 都是统计行数,而count(col) 是统计col列非null的行数

    week
  • MYSQL 下 count(*)、count(列)、 count(1) 理解

    cout(*)和count(1) 没区别,但是cout(列名) 不统计为 null 的

    王小明_HIT
  • MYSQL Count(*)和Count(1)区别

    在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数。很多人其实对这三者之间是区分不清的。本文会...

    用户1220053
  • count(1)、count(*) 与 count(列名) 的执行区别

    当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!

    范蠡
  • count(1)、count(*) 与 count (列名) 的执行区别

    当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!

    程序员小强
  • 好问题:count(1)、count(*)、count(列)有什么区别?

    当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!

    Java技术栈

扫码关注云+社区

领取腾讯云代金券