我有一个包含三个字段的messages
表
讯息
files
字段可以是0
或1
,0
时设置为message does not have files attached
,1
设置为does
messages_files
}}
然后我有一个包含三个字段的autoincremental
表
messages_files
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 字段上有一个索引(它是一个外键)。
答案 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)
上的索引。