MySQL中的COUNT函数是用于统计某个列或某个表中的行数。COUNT函数包括三个常用的参数:count(1)、count(*)、count(字段名),这三种参数的用法有所不同。下面就详细讲解这三种参数的区别。
count(1)和count(*)
当COUNT函数中为常量时,可以使用count(1)、count(*)来计数。这两种方法在结果上是相同的,但在实际执行效率不同。
- count(1)
执行count(1)时,MySQL会遍历整个表的行,总记录数由MySQL内部计算得出。这种方式可以节省MySQL做存储引擎层读取数据的时间和空间,由于不需要传输记录,所以在执行速度上比count(*)稍快。
- count(*)
执行count(*)时,MySQL会遍历整个表的行,对每一行都进行计数,这种方式会在MySQL内部消耗大量的时间和空间,因为需要传输记录。所以在执行速度上比count(1)稍慢。
综上,当需要统计表中所有行数时,两者结果相同,可以使用count(*);当需要统计表中特定行数时,可以使用count(1),效率更高。
count(字段)
当COUNT函数中为字段时,计算的是该列中不为空的值的数量。
示例说明:
假设有一个名为students的表,内容如下:
id | name | age |
---|---|---|
1 | Tom | 18 |
2 | Jerry | |
3 | Lily | 20 |
- count(*)
执行以下语句:
SELECT count(*) from students;
结果为:
count(*)
--------
3
由于count(*)会统计每一行,所以结果为3。
- count(1)
执行以下语句:
SELECT count(1) from students;
结果与count(*)相同,为3。
- count(age)
执行以下语句:
SELECT count(age) from students;
结果为:
count(age)
----------
2
由于age列中只有两个不为空的值,所以结果为2。
综上可知,count(字段)返回的是该列中不为空的值的数量。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL count(1)、count(*)、count(字段)的区别 - Python技术站