2012-04-25 187 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