优化GROUP_CONCAT查询

时间:2016-05-18 12:17:31

标签: mysql query-optimization group-concat

我有一个包含三个字段的messages

讯息

  • idmessage
  • 文本
  • 文件

files字段可以是010时设置为message does not have files attached1设置为does messages_files }}

然后我有一个包含三个字段的autoincremental

messages_files

  • id
  • idmessage

  • 文件

    id只是一个主idmessage键,file是邮件的ID,SELECT m.*, GROUP_CONCAT(mf.file SEPARATOR ',') AS fileList FROM messages m LEFT JOIN messages_files mf ON mf.idmessage = m.idmessage GROUP BY m.idmessage; 是文件的名称。

我想列出消息及其文件(如果有的话)。以下查询工作正常:

<form>

我的问题是:由于当消息没有文件时,表消息中的文件字段设置为0,我可以“跳过”这些行上的JOIN ,从而使查询更快?

谢谢!

编辑: message_files idmessage 字段上有一个索引(它是一个外键)。

1 个答案:

答案 0 :(得分:1)

使用相关子查询可能会更快:

SELECT m.*,
       (SELECT GROUP_CONCAT(mf.file SEPARATOR ',')
        FROM messages_files mf
        WHERE mf.idmessage = m.idmessage
       ) as fileList 
FROM messages m;

然后可以利用messages_files(idmessage, file)上的索引。