這是我的情況:我有大約50個不同的數據字段,我需要存儲1條記錄(沒有一條是相同的或重複的)。大約15個字段是我通常需要在查詢中使用的字段,而其餘字段有時會使用(大約40%的查詢)。在MySQL中擁有1個大表還是2個小表更好嗎?
我應該設置2個表,一個包含公共字段,另一個包含不常見的字段並以1:1的關係連接它們?或者我應該把它們放在一張桌子上?
有沒有任何優勢,速度或其他方式,做一個或另一個?
這是我的情況:我有大約50個不同的數據字段,我需要存儲1條記錄(沒有一條是相同的或重複的)。大約15個字段是我通常需要在查詢中使用的字段,而其餘字段有時會使用(大約40%的查詢)。在MySQL中擁有1個大表還是2個小表更好嗎?
我應該設置2個表,一個包含公共字段,另一個包含不常見的字段並以1:1的關係連接它們?或者我應該把它們放在一張桌子上?
有沒有任何優勢,速度或其他方式,做一個或另一個?
兩個表格表示40%的查詢有連接,60%沒有連接。
您不總體保存存儲。
40%的查詢速度較慢。
由於兩個原因,60%的查詢速度更快。 1)沒有加入。 2)更少的物理數據塊。
這個表現不同「重要」嗎?這是否使事情「更好」?
在您更清楚地定義每個查詢花費的時間並運行基準測試來衡量差異之前,這並不重要。
在決定哪個「更好」之前,您必須實際構建並測量性能。
假設您的表的行是邏輯上單獨的實體,並且所有字段都與實體相關,那麼它們應該全部位於同一個表中。
但是,您可能有一張表,其中每一行在邏輯上都是多個實體; 重構這樣,這是一個實體每桌通常被稱爲正常化,或這樣的架構:正常化。
規範化模式通常被認爲是「正確的」,但在連接表格時存在性能考慮因素。
最主要的是最小化NULL。如果您的表中的其他35個字段通常爲NULL,請考慮使用單獨的表格方法。如果它們通常是非NULL,那麼一張表可能沒問題。
查詢返回錯誤數據的速度最快嗎?最糟糕的一個連接時間爲幾秒 - 甚至不會向最終用戶註冊。說真的,誰投這個垃圾? – 2009-10-18 20:09:17
好點rexem,但我沒有看到你的答案/建議? – 2009-10-18 21:12:06
答案是這樣的:「直到你更清楚地定義每個查詢所花費的時間 - 並運行基準測試來衡量差異 - 這並不重要。」簡而言之:你必須做基準。 – 2009-10-18 22:10:15