在我正在處理的項目上,我們有一個活動表,每個活動可以鏈接到大約20個不同的「活動詳細信息」表中的一個...使用大量可能的連接進行查詢的最佳方法
eg如果活動是「工作」類型,那麼它將具有相應的activity_details_ 工作記錄,如果它是「病假」類型,那麼它將具有相應的活動記錄_ 病假記錄等。
當前我們正在加載活動,然後對於每個活動我們都有一個單獨的查詢來從相關表中獲取活動詳細信息。如果你有成千上萬的活動,這顯然不能很好地擴展。
所以,我最初的想法是有一個單一的查詢,它提取活動並一次加入細節。
SELECT * FROM activity
LEFT JOIN activity_details_1_work ON ...
LEFT JOIN activity_details_2_sickleave ON ...
LEFT JOIN activity_details_3_travelwork ON ...
...etc...
LEFT JOIN activity_details_20_yearleave ON ...
但是,這將導致每個記錄有100個字段,其中大多數是空的,並且感覺討厭。
延遲加載細節不是一個真正的選擇,因爲細節幾乎總是在覈心邏輯中被請求,至少對於主要類型來說。
有沒有這樣做的超級聰明的方式,我沒有想到?
預先感謝
您是否需要查詢任何連接表的屬性?你的RDBMS和「託管」環境是什麼? (有關於RDBMS的具體解決方案)。 – dasblinkenlight 2013-04-27 13:09:58
@dasblinkenlight不,我不需要查詢細節,它主要是信息性的東西。我們使用MySQL並使用mysqli連接到它,然後僅使用一小段代碼將數據記錄映射到相關的類,例如Activity,ActivityDetailsAbsence等 – MeatPopsicle 2013-04-27 13:43:29
根據表的大小,這個查詢會非常沉重。生成活動饋送是NoSQL所做的非常好的事情。可能想看看redis/mongo如何適合這種用例? – super9 2013-04-27 14:14:13