Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql count(*)是否比count(特定字段)效率低很多?_Mysql_Sql - Fatal编程技术网

mysql count(*)是否比count(特定字段)效率低很多?

mysql count(*)是否比count(特定字段)效率低很多?,mysql,sql,Mysql,Sql,可能重复: 在select语句中使用count(*)的好处是,我可以在任何表中使用它,这使得脚本自动化变得更容易: count\u sql='select count(*)'+getRestOfSQL('tablename') 但是,对于InnoDB来说,它是否比使用计数(特定字段)效率更低 如果specific_field不可为空,则它们是等效的,并具有相同的性能 如果specific_field可为空,则它们不会执行相同的操作计数(特定\u字段)对非空值为特定\u字段的行进行计数。这需

可能重复:


在select语句中使用
count(*)
的好处是,我可以在任何表中使用它,这使得脚本自动化变得更容易:

count\u sql='select count(*)'+getRestOfSQL('tablename')


但是,对于InnoDB来说,它是否比使用计数(特定字段)效率更低

如果
specific_field
不可为空,则它们是等效的,并具有相同的性能

如果
specific_field
可为空,则它们不会执行相同的操作<代码>计数(特定\u字段)
对非空值为
特定\u字段的行进行计数。这需要查看每行的
specific_字段的值
COUNT(*)
只计算行数,在这种情况下可以更快,因为它不需要检查
specific\u字段的值

对于MyISAM

以下内容有一个特殊的优化,因此它甚至不需要获取所有行:

SELECT COUNT(*) FROM yourtable

一般来说,这并不重要,因为我们返回的行数相同

这个链接很好地覆盖了它


此链接还解释了更多内容,

什么是
getRestOfSQL
?你能举一个完整的SQL查询的例子吗?不是重复的IMO。不同的数据库在不同形式的
COUNT
上有和没有where子句,在不同的可空性条件和索引为where的情况下有不同的性能(我没有任何关于答案的信息,但我知道我使用的SqlServer和PostgreSQL中的答案是不同的。)虽然
count(*)
vs
count(field\u name)
的语义差异是最重要的,但在特定的数据库中,这一点值得怀疑。@jonhana-我给出的链接(也由@Mark回答)已标记MySQL@MartinSmith是的。我从njk的链接开始就没有刷新过。innoDB表的
count(*)
速度不是很慢吗?@MathieuImbert:
从表中选择count(*)innoDB中的
在O(n)时间内运行,
n
是表中的行数。太棒了!感谢更新:)