我得到了一个问题:
SELECT a.nick,grp,count(*) FROM
help_mails
h JOIN accounts a ON h.helper=a.id WHERE closed=1 GROUP BY helper, grp, a.nick
这次加入有什么问题? 当我提出2个问题时:
help_mails
它快100倍。
EXPLAIN返回:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE h ref closed closed 1 const 1846 Using temporary; Using filesort 1 SIMPLE a ref PRIMARY PRIMARY 4 margonem.h.helper 1 Using where; Using index
accounts.id,help_mails.grp和help_mails.closed得到索引。
答案 0 :(得分:5)
请注意,您的第一个查询与第二个查询不同。
如果两个NICK
的{{1}}相同,则这些帐户的account
将在第一个查询中合并在一起,并在第二个查询中单独返回。
如果您希望始终返回单独COUNT(*)
的单独COUNT
,则可以将查询合并为一个:
account
或更改第一个查询的SELECT a.nick, gpr, cnt
FROM (
SELECT helper, grp, COUNT(*) AS cnt
FROM help_mails h
WHERE closed = 1
GROUP BY
helper, grp
) ho
JOIN accounts a
ON a.id = ho.helper
条件:
GROUP BY
在SELECT a.nick, grp, count(*)
FROM help_mails h
JOIN accounts a
ON h.helper = a.id
WHERE closed = 1
GROUP BY
helper, grp, a.id, a.nick
上构建综合索引会对您有所帮助,因为它将在help_mails (closed, helper, grp)
中使用。
答案 1 :(得分:1)
看起来错误的是help_mails.helper没有编入索引。