Mysql
MySQL 優化問題:有 6 列或有 15 列
想知道,最好將一個表拆分為三個表,每個表大約 6 列並使用外鍵,還是使用一個表並讓它有 15 列?
大多數欄位都是 varchars,到處都有一些數字。數據庫是 MySQL。
更好的是,我最感興趣的是插入和選擇速度。
只是為了澄清這是該特定表的一對一情況,數據主要是使用者數據,屬性將是位置年齡活躍性別等,僅與一個使用者有關。是的,我正在嘗試將熱柱與冷柱隔離開來
我建議對三種有限情況進行垂直分區:
- 一個非常熱門的列,例如“點擊”或“喜歡”或“查看”,它們的增加如此頻繁以至於更新會干擾其他操作。
- 某些列非常大,但並非一直都需要,例如
TEXT
某些文件或圖像的 a (在 a 中BLOB
)。即使這是可疑的,因為 InnoDB 會自動執行類似的操作。- 主表中經常缺少一組列,因為它們是可選的。然後,與其
NULL
在主表中創建列集,不如LEFT JOIN
在輔助表中使用 a 並在數據失去時省略該行。值得懷疑的是,這是否有助於多於傷害。進行垂直分區的一種意外方法是,當您需要為具有大量行的表添加一些新列,但又無法承受添加列的停機時間時。相反,製作一個並行表來保存新列。但是,請注意,
ALTER TABLE .. ALGORITHM=IMPLACE
主要消除了對這種技術的需要。40 列開始太多了;400太多了。也就是說,15本身不是問題。
至於性能,是的,正如其他答案所提到的,在任何一個方向上都會存在一些性能問題。
如果您不是在談論數百萬行,請不要擔心。
我的經驗法則之一:如果我不能期待 10% 的改進,那就花時間尋找其他地方進行優化。
底線:做最適合你的事情;擔心以後優化。