mysql - SELECT COUNT(*) with GROUP BY 大表慢

标签 mysql

我有一个包含大约 1 亿行的表,其中包含三列(均为 INT):

id | c_id | l_id

即使我使用索引甚至是最基本的

select count(*), c_id 
from   table 
group by c_id;

需要 16 秒 (MYISAM) 到 25 秒 (InnoDB) 才能完成。

有什么方法可以在不跟踪单独表中的计数的情况下加快此过程(例如,通过使用触发器)?

/edit: 所有列都有索引

最佳答案

查看执行计划以了解执行相同查询的可能方法 SqlFiddle ,

SELECT COUNT(id) 如果 c_id 没有在我提供的测试集上建立索引,将会更快。

否则您应该使用COUNT(*),因为查询中可能不会使用索引优化。

它还取决于数据库中的行数和引擎类型,因为 mysql 也会根据这个事实来决定哪个更好。

在执行查询之前,您应该始终看到查询的执行计划,方法是在选择之前键入 EXPLAIN

我不得不说,在大数据集的大多数情况下,COUNT(*)COUNT(id) 应该会产生相同的执行计划。

关于mysql - SELECT COUNT(*) with GROUP BY 大表慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14831265/

相关文章:

mysql - 为什么我的 bool if else 会返回到 else 语句,即使我的 sql 是正确的?

mysql - 写入sql文件

java - 应用程序运行尝试连接到 Azure Database for MySql Server 失败

MYSQL - 触发特定列时求和时间差

mysql - 我是否需要为每个 MySQL 语句一个新的查询对象?

mysql - 从 MySQL 复制到 MongoDB 时连接被强制关闭

java - JDBCTemplate 查询多次使用参数

mysql - Yii2 - 根据相关表中的计数检索模型

mysql - 如何从我的主机连接到在 docker 容器中运行的 mysql 服务器?

c++ - 仅选择 MySQL 数据库/表中的更新/新行