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