MySQL中COUNT(\*)、COUNT(1)和COUNT(column),到底用哪个?
💡
原文中文,约2300字,阅读约需6分钟。
📝
内容提要
在数据存在性判断中,建议使用COUNT(*),其性能优于COUNT(主键)和COUNT(非主键列),且符合SQL标准,清晰高效。
🎯
关键要点
- 在判断数据存在性时,建议使用COUNT(*)而非COUNT(主键)或COUNT(非主键列)。
- COUNT(*)和COUNT(1)在性能上没有区别,均优于COUNT(列名)。
- COUNT(*)会统计NULL值的行,而COUNT(列名)不会。使用COUNT()是SQL标准的做法。
- MyISAM表对COUNT(*)进行了优化,能快速返回结果,而InnoDB表的COUNT(*)和COUNT(1)性能相同。
- COUNT(column)会遍历整张表并判断非空,性能不如COUNT(*)和COUNT(1)。
- 建议使用COUNT(*)获取确切行数,写法清晰且性能较好。
❓
延伸问答
在MySQL中,COUNT(*)和COUNT(1)有什么区别吗?
COUNT(*)和COUNT(1)在性能上没有区别,均可用于统计行数。
为什么建议在判断数据存在性时使用COUNT(*)?
COUNT(*)性能优于COUNT(主键)和COUNT(非主键列),且符合SQL标准。
COUNT(column)的性能如何?
COUNT(column)会遍历整张表并判断非空,性能不如COUNT(*)和COUNT(1)。
MyISAM和InnoDB表在COUNT(*)的性能上有什么不同?
MyISAM表对COUNT(*)进行了优化,能快速返回结果,而InnoDB表的COUNT(*)和COUNT(1)性能相同。
使用COUNT(*)时需要注意什么?
使用COUNT(*)时会统计NULL值的行,而COUNT(column)不会统计NULL值的行。
在SQL中,COUNT()函数的标准用法是什么?
COUNT()是SQL92定义的标准统计行数的语法,适用于统计行数而不依赖于列的值。
➡️