我有一个包含三个字段的 messages
表
消息
- 身份信息
- 正文
- 文件
files
字段可以是0
或1
,当消息时设置为
,0
没有附加文件1
有
。
然后我有一个包含三个字段的messages_files
表
消息文件
编号
身份信息
文件
id 只是一个主要的
自动增量
键,idmessage
是消息的 id,file
是文件的名称。
我想列出消息及其文件(如果有的话)。以下查询工作正常:
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;
我的问题是:由于当消息没有文件时表 messages 中的 files 字段设置为 0,我可以“跳过”那些行上的 JOIN ,从而使查询更快?
谢谢!
编辑:message_files 在 idmessage 字段上有一个索引(它是一个外键)。
最佳答案
使用相关子查询可能会更快:
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)
上的索引。
关于mysql - 优化 GROUP_CONCAT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37299387/