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