表中有超过200万条记录。
我想统计表中有多少错误(有checked),有多少已经checked。
我做了两个查询:
SELECT count(*) as CountError FROM table WHERE checked = 1 AND error != ''
-
SELECT count(*) as Checked FROM table WHERE checked = 1
性能真的很慢,大约需要 5 分钟才能得到结果。如何改进?
我已经在 status
字段上有了 UPDATE 性能的索引。
如果我在 checked
字段上建立索引 - 那么更新性能将受到影响,这是我不希望的。
UPDATE 发生的次数多于 SELECT。
表是 Innob
最佳答案
您可以尝试在同一查询中同时计算这两项是否更快:
select
count(*) as CountError,
sum(case when error != '' then 1 else 0 end) as Checked
from table
where checked = 1
但是,差异可能不会有太多可谈的。如果你真的想要不同,那么你需要添加一个索引。考虑影响的真正含义,并进行实际测试以了解影响的真正含义。如果更新速度慢 10% 而选择速度提高 100000%,那么它可能仍然值得。
关于mysql - 如何在不索引更多字段的情况下提高计数性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9367493/