最近在優(yōu)化mysql在一個(gè)20w的表和一個(gè)200w的表的連表查詢壹店。
統(tǒng)計(jì)的時(shí)候發(fā)現(xiàn)超級(jí)慢茸塞,把表的引擎改成了MyISAM派近。改完之后在求count的sql上面的查詢速度超級(jí)快腾节。
使用left join寫的查詢,這個(gè)寫法極度的慢崭捍,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