我有一个带三个字段的表
信息
idmessage信息
文本
文件夹messages
字段可以是files
或0
,当1
时设置为0
,当message does not have files attached
时设置为1
。
然后我有一个带三个字段的does
表
消息文件
身份证件
idmessage信息
文件
id只是一个主messages_files
键,autoincremental
是消息的id,idmessage
是文件名。
我想列出邮件及其文件(如果有的话)。以下查询运行正常:
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;
我的问题是:由于表消息中的“文件”字段在消息没有文件时设置为0,所以我可以“跳过”这些行上的联接,从而加快查询速度吗?
谢谢!
编辑:消息文件在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)
上的索引。