一惧辈、優(yōu)化你的sql和索引(Innodb索引比Myisam索引慢封锉,因?yàn)橐粋€(gè)是聚集索引一個(gè)是非聚集索引)
二莽使、加緩存锐极,memcached,redis,命中緩存就可以不用查詢數(shù)據(jù)庫芳肌。
三灵再、就做主從復(fù)制或主主復(fù)制,讀寫分離亿笤。
四翎迁、垂直拆分,其實(shí)就是根據(jù)你模塊的耦合度净薛,將一個(gè)大的系統(tǒng)分為多個(gè)小的系統(tǒng)汪榔,也就是分布式系統(tǒng)。
五肃拜、水平切分痴腌,針對(duì)數(shù)據(jù)量大的表,這一步最麻煩燃领,最能考驗(yàn)技術(shù)水平衷掷,要選擇一個(gè)合理的sharding key,為了有好的查詢效率,表結(jié)構(gòu)也要改動(dòng)柿菩,做一定的冗余,應(yīng)用也要改雨涛,sql中盡量帶sharding key枢舶,將數(shù)據(jù)定位到限定的表上去查懦胞,而不是掃描全部的表。
數(shù)據(jù)庫的最左查詢凉泄,MySQL采用b+樹原理查詢躏尉,每次查詢復(fù)合字段從左到右的屬性,依次查詢后众。
例如在沒有優(yōu)化的情況下胀糜。 數(shù)據(jù)表student根據(jù)id和score建立復(fù)合索引為id _score,現(xiàn)在使用以下查詢結(jié)果為
(id蒂誉,score) 可以查詢到
(score教藻,id) 不能查詢到
如果有優(yōu)化,那么數(shù)據(jù)庫引擎可以把(score,id)優(yōu)化為(id,score)右锨,從而支持查詢括堤。