我有一个带三个字段的表
信息
idmessage信息
文本
文件夹
messages字段可以是files0,当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)上的索引。

09-26 12:53