最近在優(yōu)化mysql在一個(gè)20w的表和一個(gè)200w的表的連表查詢。
統(tǒng)計(jì)的時(shí)候發(fā)現(xiàn)超級(jí)慢,把表的引擎改成了MyISAM。改完之后在求count的sql上面的查詢速度超級(jí)快。
使用left join寫(xiě)的查詢,這個(gè)寫(xiě)法極度的慢,n*m的查詢量。所以改成了兩個(gè)表各自查詢,這樣就變成了類似n+20(每頁(yè)20條數(shù)據(jù))m2(2個(gè)查詢語(yǔ)句)的查詢量了。
同時(shí)把200w表里面需要統(tǒng)計(jì)的數(shù)據(jù)量抽出來(lái)。直接放倒20w表里面,實(shí)時(shí)統(tǒng)計(jì)。
然后油發(fā)現(xiàn)了1+n的做法還是不夠快。因?yàn)槲覀兠總€(gè)n那里有兩個(gè)sql語(yǔ)句要查詢。要知道,第二表的數(shù)據(jù)量是200w。所以還是慢。所以最后我們把20個(gè)需要查詢的id用in來(lái)包含,然后再用group by來(lái)區(qū)分。成功的吧202n的問(wèn)題改成了n+2m