货代一般用什么网站开发客户,17. 整个网站建设中的关键是,云南购物网站建设,如何建立自己的不同 count 的区别#xff1a;count(*)、count(主键 id)和 count(1) 都表示返回满足条件的结果集的总行数#xff1b;而 count(字 段)#xff0c; 则表示返回满足条件的数据行里面#xff0c;参数“字段”不为 NULL 的总个数。性能#xff1a;count(主键 id)#xff1a;I…不同 count 的区别count(*)、count(主键 id)和 count(1) 都表示返回满足条件的结果集的总行数而 count(字 段) 则表示返回满足条件的数据行里面参数“字段”不为 NULL 的总个数。性能count(主键 id)InnoDB 引擎会遍历整张表把每一行的 id 值都取出来返回 给 server 层。server 层拿到 id 后判断是不可能为空的就按行累加。count(1)InnoDB 引擎遍历整张表但不取值。server 层对于返回的每一行 放一个数字“1”进去判断是不可能为空的按行累加。单看这两个用法的差别的话能对比出来count(1)执行得要比 count(主键 id)快。因为 从引擎返回 id 会涉及到解析数据行以及拷贝字段值的操作。对于 count(字段)来说1)如果这个“字段”是定义为 not null 的话一行行地从记录里面读 出这个字段判断不能为 null按行累加2)如果这个“字段”定义允许为 null那么执行的时候判断到有可能是 null还要把值取 出来再判断一下不是 null 才累加。也就是server 层要什么字段InnoDB 就返回什么字段。 但是 count(*)是例外并不会把全部字段取出来而是专门做了优化不取值。count(*) 肯定不是 null按行累加。 看到这里你一定会说优化器就不能自己判断一下吗主键 id 肯定非空啊为什么 不能按照 count(*)来处理多么简单的优化啊。当然MySQL 专门针对这个语句进行优化 也不是不可以。但是这种需要专门优化的情况太多了而且 MySQL 已经优化过 count(*)了 我们直接使用这种用法就可以了。结论所以结论是按照效率排序的话count(字段)