2009-09-08 98 views
0
  1. 我得到了一個users表和一些論壇,用戶可以在這裏寫。論壇上的每個動作都使用users表。用戶可以有一個配置文件,它可以很大(50KB)。如果我在每一行中獲得如此大的數據,那麼將單獨的表與用戶的配置文件以及其他非常頻繁訪問的數據分開是不是更快?行設計如何影響MySQL性能?

  2. 在線RPG遊戲中,每個角色都有很長的能力列表,例如:手槍經驗,機槍經驗,投擲手榴彈經驗以及15個以上。將它們存儲在字符串中是否更好?用分號分隔的數字 - 這會佔用比整數更多的空間,還是應該爲每個單獨的字段創建?或者也許二進制? (我使用C++)

回答

0

(1)本身不,沒有。正如斯蒂芬所說,你應該只選擇你想要的東西,所以你不想在桌上有東西是沒有問題的。 50K TEXT blob只是該行中的一個指針。

但是,如果您正在使用MyISAM表,則可能會出現問題。在MyISAM中,只有表級鎖定,所以當你有一個用戶更新他們的行(例如最後訪問時間)時,它會阻止所有其他用戶訪問表。在這種情況下,您可能會遇到一些改進,將大量更新的列從相對靜態的但重要的列中分離出來。

但是你不想使用MyISAM:它有點廢話。使用InnoDB,獲得行級鎖定(以及事務和外鍵約束),不用擔心。今天使用MyISAM表的唯一原因是全文搜索,InnoDB不支持。 (2)您通常會將每個獨立的值分隔到自己的字段中。如果你遇到了一個真正的性能問題,並且你不需要自己對數據庫進行數據庫級別的操作,你可以考慮對它進行非規範化處理,但是你會失去數據庫的能力。

1
  1. 如果你不需要從 特定列中的數據,不明白這一點。 不要做SELECT *SELECT a, b,...

  2. 如果你需要 某些列做SQL查詢例如ORDER BY pistols_experience,您應該在 中將其留在不同的列中。如果 你只是一次展示這一切,你可以 通過YAML序列化不同 鍵 - 值對的文本字段 ,JSON等