0

有一个子查询,它使用 GROUP_CONCAT 将结果分组到一个字段中。但是查询需要 3 秒才能运行,而没有运行需要 0.05 秒。我已经索引了附件.actionid 和 action.actionid 是 PK。有没有提高性能的解决方案?

SELECT
  action.actiondate, acc.acc, acc.acccount
FROM
  `action`
LEFT JOIN 
  (SELECT 
    actionid,
    GROUP_CONCAT(accessory) AS acc,
    COUNT(actionid) AS acccount
  FROM
  accessorieslink 
  GROUP BY actionid) AS acc 
  ON acc.actionid = action.actionid 
4

2 回答 2

1

你可能会更好地使用这个:

SELECT
    a.actiondate, 
    GROUP_CONCAT(IFNULL(al.accessory,'') ) as acc, 
    SUM(IF(al.actionid IS NULL,0,1)) as acccount
FROM
  `action` a
LEFT JOIN accessorieslink al
    ON al.actionid = a.actionid
GROUP BY
    a.actionid
ORDER BY 
    NULL
于 2013-06-11T09:55:05.923 回答
1

acc因为您正在使 group_concat 的别名与导致 mysql 思考的表相同。

更改别名之一。

   GROUP_CONCAT(accessory) AS acc,
                               ^^^--//------ this

  GROUP BY actionid) AS acc 
                        ^^--// and this
于 2013-06-11T10:10:51.657 回答