0

GROUP_CONCAT を使用して結果を 1 つのフィールドにグループ化するサブクエリがあります。ただし、これを使用するとクエリの実行に 3 秒かかり、使用しない場合は 0.05 秒かかります。私は、accessory.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

accmysqlに考えさせるテーブルと同じgroup_concatのエイリアスを作成しているためです。

エイリアス名の 1 つを変更します。

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

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