看板 PHP 關於我們 聯絡資訊
問個PHP+MySQL的問題 資料庫有兩種規劃方式 A: 有100個欄位 但資料有10萬筆 B: 20個資料表,每個資料表5個欄位 資料有200萬筆 這兩種方式,讀取、寫入、搜尋 請幫忙比較這二種規劃方式 電腦負載及執行速度 本身是新手,如果有問錯的地方請多多包含 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.32.157
LaPass:挺有趣的問題....我也思考過,不過刷個百萬筆資料去比較過 03/13 23:53
LaPass: ^沒 03/14 01:35
kuAIpAI:我怎感覺 有點像是課本問題阿XDD 是我錯覺嗎 03/14 01:44
LaPass:課本應該只會教正規化吧 = =" 03/14 09:12
ken1325:這就是 OLAP 和 OLTP 的不同,要根據你的目的去設計資料庫 03/14 10:11
ken1325:OLAP:利於查詢。 OLTP:利於新增、修改、刪除。 03/14 10:15
ken1325:有時還會需要把 OLTP轉成OLAP,這時候就要反正規化。 03/14 10:17
eugene2528:這確實像課本問題 03/14 12:31
characterlu:先聲明這並不是課本問題,是我實務上遇到的 03/14 13:07
characterlu:例如做一個龐大的會員資料庫,很有可能要記錄超過100個 03/14 13:07
characterlu:欄位以上,就會考慮這些問題,此外,就算是課本問題 03/14 13:08
characterlu:也是可以討論吧,怎麼好像一副怕幫別人做作業的感覺 03/14 13:08
MOONRAKER:本來就不應該請別人做作業 當然也不想幫 03/14 14:09
liaosankai:@_@ 我覺得這不是作業問題,感覺這是個好問題 03/14 14:45
yanli2:A只有一個資料表? 03/14 15:52
characterlu:我有請人幫我做作業嗎?我只是說就算是作業就不能討論? 03/14 16:02
characterlu:我只是單就資料庫的規劃請益,一起思考好做法 03/14 16:03
characterlu:我也不是要請誰幫忙,我現在是有像學校做PAPER那樣 03/14 16:03
characterlu:指定格式跟字數嗎?請動一動閣下寫程式的頭腦判斷好嗎? 03/14 16:04
characterlu:莫名其妙有建設性的回答看不到半個,只看到某酸民一副 03/14 16:05
characterlu:不可一世好像別人在求它似的,你若懂不想回答可以不要 03/14 16:06
characterlu:回應,不要回那種自私自利的話,沒人要你幫忙 03/14 16:06
characterlu:如果你也不懂,那你講那種話實在是傷你父母的心,沒家教 03/14 16:07
characterlu:YANLI2對,理論上是,單純想比較,多欄位到底要全塞在同 03/14 16:08
characterlu:資料表,還是要拆多資料表,比較筆數龐大時的處理效率 03/14 16:09
carlcarl:有求於人 態度還是好一點吧 03/14 16:11
carlcarl:會覺得像是作業 一部分也是因為你自己也沒提供什麼想法 03/14 16:13
characterlu:講態度有分先後,我發文的時候自認是請益或討論心態 03/14 19:19
characterlu:而且我也聲明了並不是作業,甚至連實務的思考點都說了 03/14 19:20
characterlu:何必一直強調他是否為作業? 這點我覺得很奇怪 03/14 19:22
characterlu:所以才說就算是作業,難道就不能討論不能請教嗎? 03/14 19:22
mrbigmouth:你可以自己測試看看 以相同資料表結構、索引下去插 03/14 19:52
mrbigmouth:個一千萬筆資料進同一資料表 再測試插入新增搜索所需要 03/14 19:53
mrbigmouth:花費的時間能不能接受 03/14 19:53
mrbigmouth:以我的經驗 大多時候是使用是越少資料表越好 03/14 19:54
mrbigmouth:(在資料結構完全相同的情況下) 03/14 19:54
characterlu:嗯跟我想的一樣,只是覺得這樣規劃很醜,有程式潔癖 03/14 20:29
chrisQQ:常搜尋/讀取/修改 和很少修改的欄位分開 03/14 20:29
characterlu:那如果是我要從1000萬筆拉一筆資料出來where sn=$sn 03/14 20:30
chrisQQ:建好 index,拉出來後丟 memcache 之類的 03/14 20:32
chrisQQ:discuz 之類的討論區有按照尾數之類的分散在十個表 03/14 20:32
chrisQQ:但你搜尋就要搜10個表 03/14 20:33
characterlu:chrisQQ這方式很棒很聰明,不失為兩全其美的好方法 03/14 20:33
characterlu:但是欄位分開會不會造成資料庫管理的錯亂? 03/14 20:34
chrisQQ:如果你喜歡撈出來的時候拼在一起,就 join 起來 03/14 20:35
chrisQQ:另外我剛剛測了一下,在 index 建好的情況下 03/14 20:36
chrisQQ:27,353,371 筆資料撈特定 sn 的時間 查詢花費 0.0007 秒 03/14 20:36
chrisQQ: 特定一筆 sn 03/14 20:36
chrisQQ:不過通常 join 的速度不會比較快,這是在我們公司的case下 03/14 20:38
chrisQQ:測試的結果。當然沒有完全正規化也是影響的因素。 03/14 20:38
chrisQQ:是說,也許你可以到 database 板問其他前輩們的意見 03/14 20:39
carlcarl:應該說是programer會錯亂 管資料庫本身的人應該還好 03/14 21:45
carlcarl:所以建議query應該整合並分類成幾個model來用 03/14 21:46
carlcarl:資料庫架構有改的話 就統一從model去改 寫程式的只要 03/14 21:47
carlcarl:知道他要用什麼function就好 03/14 21:47
characterlu:所以似乎作法還是得看應用在何種情況之下 03/15 16:38
characterlu:並無那個特定的比較好 03/15 16:38