2011-02-17 151 views
1

假設你有一個博客帖子,用戶可以subscrive來評論 是爲更快地通過專門的管理像訂閱表中搜索: ID,郵政,用戶MySQL的搜索和索引性能

或者是更快在users表中有一個字段,其子字段爲: 訂閱= | 2 | 4 | 18 | 21 | 33 |

或者在發佈表中有一個字段與提供該帖子的用戶相比更快: Users_subscrive = | 1 | 2 | 4 | 6 | 9 |

+0

第二個建議是具有多個值的字段嗎? – Mike 2011-02-17 16:19:33

+1

@Mike這就是它看起來像 – 2011-02-17 16:21:19

回答

2

最好是有一個單獨的表Subscriptions,與IDPostUser

(假設ID該表的自動增量PK,發佈FK到表PostsUser一個FK到表Users

無論從邏輯上看(訂閱是它自己的實體,從而它自己的表)就數據庫性能而言,一個單獨的表是要走的路。

這是一個叫做normalization過程中,它可以讓你做連接,並進行復雜的查詢,如「給我訂閱了這個帖子最後5個用戶」或「得到所有帖子此用戶自從他上次訪問以來已發生了變化「。

它也不限制您的最大訂閱限額(其中用戶表中的固定字段總是有一個長度)。

它會讓你以後到輕鬆擴展你的模型。例如,不同類型的訂閱:通過RSS,通過郵件,最喜歡的帖子得到通知...

最後但並非最不重要的,因爲你使用MySQL,這是一個關係數據庫,這種工作方式(關係,get它?)在MySQL中快得多。它允許索引(快速搜索),外鍵(用戶無法訂閱不存在的帖子,如果帖子被刪除,所有訂閱自動刪除)等等。

1

如果索引正確,搜索實際表格字段會更快。

事實上,即使它們沒有編入索引,它也應該更快!