JOINS与Group_Concat() - 多个一对多关系

时间:2015-09-30 03:05:53

标签: php mysql performance join group-concat

我有一个表posts,它与多个表(filescategories在下面的完全简化示例中具有一对多关系)。 posts还有许多为每行返回的字段。

如果我返回1000行posts并且每个帖子有4个files和3个类别,我将在结果集中获得12000条记录(复制帖子信息以便为我提供文件信息)。随着每一对多关系的增长和发展。

下面显示了我当前JOIN的过度简化版本以及预期的Group_Concat()版本。 Group_Concat方法可以极大地简化php处理。

评论这两种方法的表现?

更新我意识到我对JOIN方法的主要关注不是php代码,而是处理更大的结果集所消耗的服务器内存(& cpu资源?)。由于我有一个text类型的字段,因此每行都有大量数据。

使用联接

SELECT p.postid, title, fileid, filename, category
FROM posts p
LEFT JOIN files f ON f.postid = p.postid
LEFT JOIN categories c ON c.postid = p.postid

使用Group_Concat()

select p.postid, title, (
    SELECT group_concat(
        concat_ws(",", fileid, filename)
        SEPARATOR ';') 
        FROM files f WHERE f.postid = p.postid
    ) as fileinfo
    SELECT group_concat(category) 
        FROM categories WHERE cat.postid = p.postid
    ) as catinfo
FROM posts p

0 个答案:

没有答案