COUNT(*)与COUNT(COL)
网上搜索了下,发现各种说法都有:
比如认为COUNT(COL)比COUNT(*)快的;
认为COUNT(*)比COUNT(COL)快的;
还有朋友很搞笑的说到这个其实是看人品的。
在不加WHERE限制条件的情况下,COUNT(*)与COUNT(COL)基本可以认为是等价的;
但是在有WHERE限制条件的情况下,COUNT(*)会比COUNT(COL)快非常多;
具体的数据参考如下:
mysql> SELECT COUNT(*) FROM cdb_posts where fid = 604;
+————+
| COUNT(fid) |
+————+
| 79000 |
+————+
1 row in set (0.03 sec)
mysql> SELECT COUNT(tid) FROM cdb_posts where fid = 604;
+————+
| COUNT(tid) |
+————+
| 79000 |
+————+
1 row in set (0.33 sec)
mysql> SELECT COUNT(pid) FROM cdb_posts where fid = 604;
+————+
| COUNT(pid) |
+————+
| 79000 |
+————+
1 row in set (0.33 sec)
COUNT(*)通常是对主键进行索引扫描,而COUNT(COL)就不一定了,另外前者是统计表中的所有符合的纪录总数,而后者是计算表中所有符合的COL的纪录数。还有有区别的。
COUNT时的WHERE
这点以前就写过,详细请看《Mysql中count(*),DISTINCT的使用方法和效率研究》:http://www.ccvita.com/156.html
简单说下,就是COUNT的时候,如果没有WHERE限制的话,MySQL直接返回保存有总的行数
而在有WHERE限制的情况下,总是需要对MySQL进行全表遍历。
优化总结:
1.任何情况下SELECT COUNT(*) FROM tablename是最优选择;
2.尽量减少SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种查询;
3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出现。
分享到:
相关推荐
在MySQL数据库中,优化`DISTINCT`操作是一个关键的性能提升策略,特别是在处理大量数据时。上述场景中,用户遇到了一个问题:对一个10G以上的单表`user_access_xx_xx`执行`SELECT COUNT(DISTINCT nick)`以统计唯一...
综上所述,针对InnoDB引擎的`COUNT(*)`性能问题,可以通过选择合适的查询策略、利用索引、使用外部计数器或优化数据库配置来提升查询效率。在设计和优化数据库时,应根据实际业务需求和数据规模来权衡这些解决方案。
从执行计划、SELECT语句、IN和EXIST语句、LIMIT语句、RAND函数、Order by、Group by、Distinct和Count等方面对MySQL数据库优化进行了详细的讲解。 一、执行计划 执行计划是MySQL数据库优化的重要步骤。执行计划...
MySQL是世界上最流行的开源关系型数据库管理系统之一,其面试题涵盖了多个方面,包括表连接类型、COUNT函数的不同用法、索引类型以及优化策略等。以下是对这些知识点的详细阐述: 1. **表连接类型** - **内连接...
### MySQL 进阶优化知识点详解 #### 一、SQL语句优化原则与实践 在进行MySQL性能优化时,首先需要了解的是SQL语句优化的基本原则。优化的目标是提高查询效率,减少不必要的数据处理,从而提升数据库的整体性能。...
### MySQL优化文档知识点详解 #### 一、查询条件应按照表中索引查询 在MySQL数据库操作中,索引的设计与使用对于查询性能至关重要。合理的索引能够显著提高查询速度,减少I/O操作次数,从而降低数据库服务器负载。...
### DISTINCT优化之MySQL官方文档翻译解析 #### 一、引言 在数据库查询操作中,经常需要使用`DISTINCT`关键字来去除重复记录,确保结果集中的每一条记录都是唯一的。然而,在某些场景下,使用`DISTINCT`可能会导致...
### MySQL COUNT(*)优化详解 #### 一、COUNT(*)性能瓶颈分析 在MySQL中,`COUNT(*)`函数被广泛应用于查询表中的记录总数。然而,在某些场景下,尤其是使用InnoDB作为存储引擎时,`COUNT(*)`可能会导致性能瓶颈。...
### MySQL SQL优化关键知识点 #### 一、减少IO次数 **知识点详解:** - **数据库操作瓶颈:** 数据库操作中最容易出现瓶颈的地方是IO(输入/输出)操作。这是因为数据库设计的本质决定了它需要频繁地读写磁盘或存储...
通过遵循上述查询优化和 SQL 编写注意事项,我们可以提高 MySQL 的查询效率,减少数据库的负载。但是,需要注意的是,索引不是越多越好,需要根据实际情况选择合适的索引方式。同时,SQL 编写也需要遵循一定的规范,...
MySQL数据库设计与优化是数据库管理中的重要环节,它关乎到系统的性能、稳定性和可扩展性。本讲座由叶金荣分享,主要涵盖了多个关键方面,包括规范、基础规范、命名规范、库表规范、字段规范、索引规范以及开发环境...
- **COUNT(*)的优化**:当在一个表上执行`COUNT(*)`且无WHERE条件时,MySQL可以直接从表中获取相关信息而无需额外处理。 - **NOT NULL 表达式的优化**:对于单表查询,如果查询条件中包含NOT NULL表达式,MySQL也会...
- **编辑器**: 利用mysql的输入行编辑器功能提高工作效率。 - **批处理**: 批处理模式用于自动化执行SQL脚本。 **3.3 有关数据库的操作** - **显示数据库**: 使用SHOW DATABASES命令查看当前系统中存在的所有...
### MySQL优化、问题案例分析 #### 案例一:索引优化 ##### 问题描述 用户系统响应缓慢,数据库CPU占用率高达100%。经排查发现,数据库中有大量执行时间超过2秒的慢SQL语句。具体示例如下: ```sql SELECT uid ...
查询优化是提升MySQL数据库性能的关键环节之一。在数据库系统中,查询操作是最常见的用户交互形式。一个查询从客户端发起,到达数据库服务器,经过处理后返回结果给客户端。尽管查询过程看似简单,但不同查询方式与...
在MySQL数据库中,`DISTINCT` 和 `COUNT(*)` 是两种常见的SQL查询关键字,它们各自有不同的用途和场景。本文将详细探讨这两种方法的使用方法及其差异。 首先,`DISTINCT` 关键字用于从查询结果中去除重复的记录。在...
通过以上内容的学习,你可以深入了解MySQL的核心概念、掌握基本和高级的数据库操作技能,并且能够运用这些知识来优化数据库性能和开发更高效的数据库应用。无论是对于初学者还是有一定经验的开发者来说,这些知识点...
MySQL中的InnoDB存储引擎在处理`COUNT(*)`查询时,会根据不同的索引类型和查询条件来决定执行效率。在优化`COUNT(*)`查询时,理解InnoDB的聚集索引(Clustered Index)和辅助索引(Secondary Index)的工作原理至关...