2013-12-13 114 views
1

尋求避免未來增長的潛在問題(想想成千上萬的表中的記錄)MySQL加入與子查詢與?

我有兩個表格,一個用於存放這些文檔的文檔和其他類別。基本上文檔可以有很多種類。我希望能夠返回所有相應的類別爲一個文件,有點像這樣

doc.id,doc.name,...,類別1,類別2

圖有兩種方法實現這一點

a)加入使用這樣的事情將表連接在一起,然後解析輸出。這裏的問題是,我們將數據複製爲多個類別的文檔,因爲它屬於

SELECT id, name, ..., category 
FROM doc 
LEFT OUTER JOIN category ON (doc.id = category.docId) 

B)子查詢使用蘇格查詢所有類別串連在一起。問題在這裏是一個潛在的性能問題

SELECT 
    id, name, .... 
    (SELECT group_concat(category,',') FROM category where category.docId = doc.id) as category 
from doc 

或任何其他想法可能會更好地工作,記住性能?

+1

根據經驗,在子查詢之前使用JOIN。 Google'加入fu jay管道'。他有一些很好的介紹加強了這一點。 – AgRizzo

+2

個人而言,我發現幾乎沒有用於CONCAT或GROUP_CONCAT。我發現可以在應用程序級別輕鬆管理級聯。 – Strawberry

回答

1

創建一個視圖,該視圖最初可能是解決方案a),但可以稍後在數據庫中將其更改爲解決方案b)或c)(如果需要)。這樣就不需要更改客戶端代碼。