0

您好,我在查询中添加了 GROUP_CONCAT 函数,该函数杀死了我的查询:/。我的查询是:

SELECT u.username,a.user_id,a.id,a.text,a.lang as fromLang,b.lang as toLang,GROUP_CONCAT(DISTINCT b.id) AS translation_ids  FROM sentence as a 
   INNER JOIN sentence_relationship as sr ON 
    (sr.sentence_id = a.id)
   INNER JOIN sentence as b ON 
    (b.id = sr.translation_id AND a.id = sr.sentence_id) 
   INNER JOIN users as u ON 
    (u.id = a.user_id) GROUP BY a.id LIMIT 10;

该查询有什么问题?

4

1 回答 1

0

这是您的查询(有点格式化):

SELECT u.username, a.user_id, a.id,a.text,a.lang as fromLang, b.lang as toLang,
       GROUP_CONCAT(DISTINCT b.id) AS translation_ids 
FROM sentence a INNER JOIN
     sentence_relationship sr
     ON sr.sentence_id = a.id INNER JOIN
     sentence b
     ON b.id = sr.translation_id AND a.id = sr.sentence_id INNER JOIN
     users as u
     ON u.id = a.user_id
GROUP BY a.id
LIMIT 10;

从您的问题中不清楚是否group_concat()添加了group by. 这可能会减慢速度。

limit 10正在采用匹配的前 10秒a.idgroup by执行隐式排序)。如果您使用子查询执行此操作,它可能会加快查询速度:

SELECT u.username, a.user_id, a.id,a.text,a.lang as fromLang, b.lang as toLang,
       GROUP_CONCAT(DISTINCT b.id) AS translation_ids 
FROM (select s.*
      from sentence s
      order by a.id
      limit 10
     ) a INNER JOIN
     sentence_relationship sr
     ON sr.sentence_id = a.id INNER JOIN
     sentence b
     ON b.id = sr.translation_id AND a.id = sr.sentence_id INNER JOIN
     users as u
     ON u.id = a.user_id
GROUP BY a.id;

这假设所有连接都有效并匹配记录。如果连接用于过滤,则返回的行数可能少于 10 行。

于 2013-08-18T22:12:43.587 回答