MySQL复杂连接优化

MySQL复杂连接优化,mysql,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”,其中包含: -------------------

我有一个结果集,我使用以下方法从三个表之间的联接中获得:

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\u FK,userID\u FK)
对是PK

第一次查询返回的每个
X.id
D
表中可能有多个条目。通常,对于每个返回的行,为了计算每个
id
的投票数,我会编写如下查询:

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

我想知道是否可以将这两个查询优化为一个查询,因为当前方案会导致执行时间
O(n)
n
是第一次查询返回的结果数。

您可以这样做

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