MySQL查询优化(使用COUNT和JOIN)

时间:2011-12-27 16:29:37

标签: mysql optimization join count

我有一个查询从四个不同的表中获取信息,并将它们全部加入。这些表是'公会','公会_成员','公寓'和'用户'。我的查询有效,但我只是想知道它的效率以及它是否可以更快。

我的意思是目前它工作正常且速度很快,但guilds_memberships内部的数据并不多,而且它是COUNTED()'d。我正在使用的查询如下所示。 (对于guilds_memberships,flatts和users btw中的每个公会,总会有至少1条记录,如果这对任何优化都有帮助(没有理由检查NULL))

SELECT g.id, g.roomid, g.ownerid, g.roomid, g.state, g.name, g.description, g.badgestring, g.primarycolour, g.secondarycolour, g.created, u.username, f.FlatName, COUNT( m.guildid ) AS Members
FROM guilds g
INNER JOIN users u ON u.id = g.ownerid
INNER JOIN flats f ON f.FlatID = g.roomid
INNER JOIN guilds_memberships m ON m.guildid = g.id
WHERE g.id =1
LIMIT 0 , 30

1 个答案:

答案 0 :(得分:1)

嗯,我认为你不能做些什么来大大提高这个查询的性能。它看起来不错,甚至表现很好。

但是,如果它开始表现不那么好,我将采取以下步骤:

  1. 在部分中断此查询。在一个查询中检索公会信息,在另一个查询中检索用户信息等。让应用程序代码进行加入。

  2. 缓存可缓存的内容。我敢打赌,u.usernamef.FlatName不会经常更改,因此您可以加载一次并保留在内存中(或memcached)。

  3. 这些更改的目的是减轻数据库的负载。应用程序服务器(通常)可以轻松扩展,只需启动更多工作人员。另一方面,数据库是最难扩展的组件之一。