0
那么,我有一个很好的索引和一些数据的MySQL表,我需要为这些数据做一个统计报告。这意味着我有很多事情在这样的查询快速计算MySQL表中的统计信息
select
count(*) n,
sum(if(column1>0,1,0)) n1,
sum(if(<simple expression>,1,0)) n2,
sum(if(<another simple expression>,1,0)) n3,
....
from table1
left join table 2 ...
group by <simple expression>
的问题是,这个查询是很慢的。将整个表从InnoDB转换为MyISAM可以将查询时间从30秒缩短到8秒,这很好,但是MyISAM有其他的限制,阻止多个用户同时使用这个表(TABLE LOCK实际上锁定整个应用程序)。 我知道需要将整个表加载到内存中的原因。鉴于表格有几千兆字节大小,这几乎是不可能的,这就是为什么我们有这样的放缓。 我正在寻找这个问题的良好解决方案。有谁能够帮助我?
在MySQL布尔有整数表示,所以你可以直接总结它们。 – 2014-09-27 18:29:28
你可以在单独的查询中尝试每个选择值吗?它可能只有其中一个未被正确优化,或正在放慢其他或某事。 Mysql对于每个值可能都需要不同的索引,并因此而失去速度。先看看他们每个人先看看哪一个很快,哪一个很慢。 – vrijdenker 2014-09-27 18:31:42
@ PM77-1表示:您可以使用SUM(column1> 0)来代替SUM(IF(column1> 0,1,0)) – 2014-09-27 18:38:20