例如,我有3个表:第一个像'Users',每个用户的名字都存储在这里。第二个- 'Location',存储用户地址的地方-通常是一个用户的一个地址。第三个是“消息”--每个用户通常都有一堆记录。
当连接这三个表时-就像
SELECT Users.name, Location.address, Messages.message FROM Users
LEFT JOIN Location ON Location.user_id = Users.id
LEFT JOIN Messages ON Messages.user_id = Users.id
WHERE blah blah结果将包含许多重复的记录,因为表'Messages‘对每个用户都有许多记录。这些副本会减慢抓取速度。因此,我正在寻找解决方案,如何对其进行优化。例如,我尝试使用GROUP_CONCAT()和GROUP BY User.id -但当GROUP_CONCAT()的结果变得相对较长时,GROUP_CONCAT()开始返回NULL。我无法掌握它,我曾尝试将group_concat_max_len和max_allowed_packet设置为较高的值-但都没有成功。
好吧,有人对此有什么想法吗?
ps可能很重要的一点是,在我的实际情况中,我有许多列和许多不同的行,而不是只有一列'message‘。我的'Messages‘表看起来像'message','time','recipient',’deleted','medium‘等等,我的GROUP_CONCAT()包含所有这些字段。
更新:如果只有一条记录显示为NULL,则GROUP_CONCAT()似乎会丢弃所有结果。例如,如果使用GROUP_CONCAT(Messages.message, Messages.time),并且一行中的时间偶尔会为NULL,则将返回NULL。
发布于 2013-03-26 03:53:41
在这种情况下,您实际上可能受益于文档存储数据库,如Mongo,用于存储消息。
https://stackoverflow.com/questions/15623493
复制相似问题