2014-08-28 115 views
0

我正在尋找一些關於我正在工作的設計的建議。這是這樣的情況:DB設計建議想要

我有一個會議桌和用戶表的數據庫。每次會議都有一個組織機構,對應於用戶在使用中的ID。 Verry在這一點上很簡單。

現在通過facebook api我得到每個人的朋友列表。我想在我的數據庫中搜索我的朋友組織的會議。我想到的第一件事就是查詢中的一個簡單的IN('朋友列表'),但我可以想象這會導致性能下降。

現在的想法是製作一個包含userID和friendID並加入查詢中的表。

有人對什麼性能最好有一些建議。其他的解決方案着,當然,更受歡迎;)

THX

ň

PS。 MySQL DB

+1

「但我能想象這是殺人的性能。」 ---它只是想象力或知識嗎? – zerkms 2014-08-28 11:58:51

+0

嗯,我知道一個IN語句經常被DB重寫爲一堆OR語句,所以在我的想象中這對性能並不是好事。這就是爲什麼我在這裏要求建議,我不知道肯定;) – NCS 2014-08-28 12:04:36

+0

性能問題通常是最好的(或唯一的)方式來確定是在現實生產負載下測試它,看看會發生什麼。數據庫查詢優化器非常複雜,很難預測他們會做什麼。 – 2014-08-28 12:09:31

回答

1

IN這裏不是一個基本問題。但是,如果給定的DBMS優化器不是很好並且不能產生最佳的查詢計劃,那麼這可能是一個實際問題。但在這種情況下,您通常可以重新編寫查詢以使用不同的語法(例如JOIN),它們可以實現相同的功能,但允許優化程序生成更好的計劃。

MySQL由於沒有優化INs而臭名昭着,所以人們默認使用JOIN。其他DBMS通常不具有這樣的限制。最好自己測試性能,on representative amounts of data,看看你是否真的有問題。

順便說一句,無論如何,你需要一個會議和用戶之間的交接表 - 畢竟,如果一個會議不能有多個參與者,會議的目的是什麼?如果組織者也應考慮的參與者,你可以做這樣的事情:

enter image description here