2012-07-30 28 views
1

假設用戶可以從列表中選擇任意數量,我們需要跟蹤每個用戶的選擇。請記住,他們可以選擇多達300個數字(例如,如果他們選擇所有數字,1,2,3 ... 299,300),根本沒有或者其中的某個數字(例如4,17,87,113,189 ,251,289)。跟蹤用戶使用MySQL選擇的數字列表的最有效方法?

什麼是最好,最有效的方式來跟蹤每個用戶在MySQL中的選擇?

的兩個備選方案我能想到的是:

1)一行爲每個用戶,與含有以逗號分隔它們的選擇的列表中的列。添加和刪​​除選擇需要獲取該用戶的列,添加/刪除選擇,然後將列表保存回列。

2)每一行對應一個單獨的選擇,與用戶的列其對應於和用於取得的個體選擇另一列。添加和刪​​除選擇只需要對該用戶和選擇對應的行執行INSERT或DELETE操作。

好,2)似乎是爲DB更「自然」,但它幾乎似乎效率不高,當你有幾十萬用戶的每個組成300點的選擇,這將創建一個表與多個行等於這兩者的乘積。而1)只包含等於用戶數量的行數。這就是說,我傾向於2),因爲它對數據庫來說更自然,但我只是想確保它是正確的選項,並且沒有更有效的方法來做這件事,因爲我不想要這樣做,因爲我不想要這樣做,因爲我不想要這樣做,因爲我不想要我的網站因爲這個越來越大而放慢速度。

謝謝!

+0

不適用於預優化。因此,只要採取解決方案2,如果需要,您可以隨時添加緩存等,以便在需要時獲得更快的解決方案。 – 2012-07-30 12:11:08

+0

您不僅應該考慮「效率」,還應該根據這些數據來做什麼。你需要用它來計算;那些條目是純數字還是有任何元數據綁定到他們...... – feeela 2012-07-30 12:13:51

回答

0

如果由於存儲器/磁盤透視圖中#1的稀疏填充性質而導致適當索引#2,則效果會更好。另外,每個用戶1或300行對於在對數時間執行搜索的索引查找意義不大。

0

SQL在處理數據行時效率非常高,在查詢一列中的數據時效率低得多。

相關問題