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(*)
vscount(field\u name)
的语义差异是最重要的,但在特定的数据库中,这一点值得怀疑。@jonhana-我给出的链接(也由@Mark回答)已标记MySQL@MartinSmith是的。我从njk的链接开始就没有刷新过。innoDB表的count(*)
速度不是很慢吗?@MathieuImbert:从表中选择count(*)innoDB中的在O(n)时间内运行,n
是表中的行数。太棒了!感谢更新:)