2012-04-25 189 views
1

我有一個結果集,我用三個表之間的連接獲得:MySQL的複雜連接優化

SELECT X.*, Y.Name FROM `A` AS X 
INNER JOIN `B` AS Y 
INNER JOIN `C` AS Z 
ON X.id=Y.id AND X.categoryID=Z.categoryID 
WHERE X.userID_FK=%d AND X.listID_FK=%d 
ORDER BY Z.categoryRank ASC 

我有第四個表「d」包含:

------------------------------- 
    id_FK userID_FK vote 
------------------------------- 

這裏(id_FK, userID_FK)對是PK。

由第一個查詢返回的每個X.id可能在D表中有多個條目。通常情況下,每個返回行,以每id計票,我會寫這樣的查詢:

SELECT SUM(vote) FROM D WHERE `id`=%d 

我想知道如果我能這兩個查詢優化成一個單一的查詢作爲當前方案結果執行時間爲O(n)n是第一個查詢返回的結果數量。

回答

3

你可以簡單地做這樣的

SELECT 
X.*, 
Y.Name, 
(SELECT 
    SUM(vote) 
    FROM D 
    WHERE `id` = X.id) as Count 
FROM `A` AS X 
INNER JOIN `B` AS Y 
INNER JOIN `C` AS Z 
ON X.id = Y.id 
    AND X.categoryID = Z.categoryID 
WHERE X.userID_FK = % d 
AND X.listID_FK = % d 
ORDER BY Z.categoryRank ASC