2009-12-11 56 views
1

我處於兩難境地。我不確定是否將用戶表分開是一個好主意。我注意到我的比賽高分表表演,隨着數字的增長,負載越來越慢。多用戶表VS 1用戶表?

我目前的用戶表存儲所有用戶,目前約有10k用戶。我想分裂的用戶表(用於未來)到像這樣的:那麼

登錄表=>存儲用戶的登錄信息

========================================== 
= id | username | password | tableid = 
========================================== 
= 1 | user1 | user1xx | 1  = 
= 2 | user2 | user2xx | 1  = 
... 
= 20k1 | user20k1 | user20k1 | 2  = 
etc 

用戶的數據

========================================== 
= id | money | items | preferences = 
========================================== 
= 1 | xx | xx | xx  = 
= 2 | xx | xx | xx  = 
... 
= 20k1 | xx | xx | xx  = 
etc 

,當我嘗試獲取用戶數據我只是通過LEFT JOIN查詢來獲取數據。

我的問題是,將用戶數據存儲在多個表中並將用戶數據存儲在單個表中之間是否存在差異(速度,表現等)? (假設索引和主鍵是相同的)

我現在的表的索引:

遊戲高分表=>列:ID,遊戲ID,姓名,分數,日期

主鍵:ID

索引:遊戲ID

登錄表=>列:ID,用戶名,密碼

主鍵:ID(用戶ID)

指標:用戶名

用戶數據=>列:alots

指標:ID

回答

1

這聽起來真的是你在這裏的問題是這樣的:爲什麼馬應用程序很慢。首先,在幾張表格之間分割數據不會有助於提高性能。如果做得對(除了表現之外的原因)它不會損害性能,但我懷疑它會有所幫助。

更何況,根據我的經驗,根據直覺來優化是一個壞主意。不知何故,猜測你的程序後退通常是錯誤的。你最終做了很多重寫,沒有任何獲益。

加速它的第一步是找到真正的瓶頸。您需要添加檢測工具並收集一些統計數據 - 是數據庫還是應用服務器。它是一個特定的sproc還是可能是您網絡的帶寬。或者可能是你的網頁上有一些JavaScript。

只有在您知道要解決什麼問題後,纔可以嘗試修復它。

0

如果你查詢的信息比特和你有很多的(編輯:)列,這是實際上是一個非常好的主意讓他們分開,並且不需要users表中的tableid字段,只需要在信息表中指向用戶表中關聯用戶的外鍵。

您可以擁有多個表格並根據需要加入,表現很可能會提高。

1

聽起來像分裂桌子不會對你有任何好處。看起來這些表格之間會出現1:1的相關性,並且只要您想從表格中獲取某些內容,就可以簡單地添加第二個查詢。

嘗試在桌上使用Partitioning來幫助您在這方面的表現。

規範化僅在您有冗餘數據時纔有用(因此,您的用戶表中的用戶數量相同,爲5次)。如果您希望降低特定用戶對多個遊戲的高分數據,但最終它可能不會提高桌面性能。