Mysql

MySQL 優化問題:有 6 列或有 15 列

  • April 7, 2017

想知道,最好將一個表拆分為三個表,每個表大約 6 列並使用外鍵,還是使用一個表並讓它有 15 列?

大多數欄位都是 varchars,到處都有一些數字。數據庫是 MySQL。

更好的是,我最感興趣的是插入和選擇速度。

只是為了澄清這是該特定表的一對一情況,數據主要是使用者數據,屬性將是位置年齡活躍性別等,僅與一個使用者有關。是的,我正在嘗試將熱柱與冷柱隔離開來

我建議對三種有限情況進行垂直分區:

  • 一個非常熱門的列,例如“點擊”或“喜歡”或“查看”,它們的增加如此頻繁以至於更新會干擾其他操作。
  • 某些列非常大,但並非一直都需要,例如TEXT某些文件或圖像的 a (在 a 中BLOB)。即使這是可疑的,因為 InnoDB 會自動執行類似的操作。
  • 主表中經常缺少一組列,因為它們是可選的。然後,與其NULL在主表中創建列集,不如LEFT JOIN在輔助表中使用 a 並在數據失去時省略該行。值得懷疑的是,這是否有助於多於傷害。

進行垂直分區的一種意外方法是,當您需要為具有大量行的表添加一些新列,但又無法承受添加列的停機時間時。相反,製作一個並行表來保存新列。但是,請注意,ALTER TABLE .. ALGORITHM=IMPLACE主要消除了對這種技術的需要。

40 列開始太多了;400太多了。也就是說,15本身不是問題。

至於性能,是的,正如其他答案所提到的,在任何一個方向上都會存在一些性能問題。

如果您不是在談論數百萬行,請不要擔心。

我的經驗法則之一:如果我不能期待 10% 的改進,那就花時間尋找其他地方進行優化。

底線:做最適合的事情;擔心以後優化。

引用自:https://dba.stackexchange.com/questions/169336