mysql - 這個(gè)數(shù)據(jù)庫(kù)合計(jì)用 視圖做,和直接算好存在數(shù)據(jù)庫(kù)里,到時(shí)候調(diào)用起來(lái)哪個(gè)快?
問(wèn)題描述

大家看這個(gè)表,其實(shí)主科總分,副科總分,總分 都能通過(guò) 前面的的數(shù)據(jù)算出來(lái),
我想問(wèn)問(wèn),要是 不考慮存儲(chǔ)空間的情況下,
是把 主科總分,副科總分,總分 在插入數(shù)據(jù)的時(shí)候,就算出來(lái)好,還是 用 VIEW 算好?
這個(gè)好的意思,是減少服務(wù)器負(fù)擔(dān),還是搜索速度快.
問(wèn)題解答
回答1:從第三范式的角度看,主科總分、副科總分、總分這三列屬于依賴于其他列的數(shù)據(jù),不應(yīng)該作為單獨(dú)的列放到數(shù)據(jù)庫(kù)表中。
如果考慮數(shù)據(jù)讀取的壓力很大,不想在應(yīng)用服務(wù)器或數(shù)據(jù)庫(kù)端再做計(jì)算,那么可以按照冗余列的方式存儲(chǔ)在表中。在上面所說(shuō)的場(chǎng)景中,學(xué)生的成績(jī)錄入后修改的次數(shù)應(yīng)該很少,因此冗余列的更新成本較低,屬于典型的讀多寫少的情況,因此有冗余列總體上服務(wù)器的壓力會(huì)比較低。
回答2:看你是插入數(shù)據(jù)多,還是讀取結(jié)果多;插入數(shù)據(jù)時(shí)多時(shí)就把計(jì)算放在視圖內(nèi),讀取數(shù)據(jù)多時(shí)就把sql計(jì)算結(jié)果放在表里,但讀取的壓力遠(yuǎn)遠(yuǎn)低于插入吧,這個(gè)比例還是要權(quán)衡下,建議選擇放在視圖內(nèi)。

網(wǎng)公網(wǎng)安備