我有一个包含大约 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/