Mysql 单查询与多查询:执行时间和资源使用

Mysql 单查询与多查询:执行时间和资源使用,mysql,sql,Mysql,Sql,我想知道使用包含很多值的“IN”限制的缺点是什么 SELECT count(*), mail FROM event, contacts WHERE event.contactid = contacts.id AND event_type = 1 AND mail IN (@1, @2, @3, etc.) GROUP BY mail; 另外,您认为将这些查询拆分为多个并行执行的查询会更好吗?与第一个解决方案相比,在资源使用和执行时间方面(例如)会产生什么后果 提前感谢切勿在FROM子句中使用逗

我想知道使用包含很多值的“IN”限制的缺点是什么

SELECT count(*), mail
FROM event, contacts
WHERE event.contactid = contacts.id
AND event_type = 1
AND mail IN (@1, @2, @3, etc.)
GROUP BY mail;
另外,您认为将这些查询拆分为多个并行执行的查询会更好吗?与第一个解决方案相比,在资源使用和执行时间方面(例如)会产生什么后果

提前感谢

切勿在
FROM
子句中使用逗号。始终使用正确、明确的
JOIN
语法

限定列名并使用表别名:

SELECT count(*), c.mail  -- I am guessing `mail` comes from `contacts`
FROM event e JOIN
     contacts c
     ON e.contactid = c.id
WHERE e.event_type = 1 AND
      c.mail IN (@1, @2, @3, etc.)
GROUP BY c.mail;
在列表中有一个大的
并没有坏处(好吧,在合理的范围内——在某些时候,您可能会达到查询长度限制)。事实上,当常量用于
列表中的
时,MySQL有一个很好的优化。它对列表进行排序,并对值进行二进制搜索

也就是说,如果列表来自另一个表/查询,那么不应该将它们作为常量放入。相反,您应该将表/查询合并到此查询中。

切勿在
FROM
子句中使用逗号。始终使用正确、明确的
JOIN
语法

限定列名并使用表别名:

SELECT count(*), c.mail  -- I am guessing `mail` comes from `contacts`
FROM event e JOIN
     contacts c
     ON e.contactid = c.id
WHERE e.event_type = 1 AND
      c.mail IN (@1, @2, @3, etc.)
GROUP BY c.mail;
列表中有一个大的
并没有坏处(好吧,在合理的范围内——在某些时候,您可能会达到查询长度限制)。事实上,当常量用于
列表中的
时,MySQL有一个很好的优化。它对列表进行排序,并对值进行二进制搜索

也就是说,如果列表来自另一个表/查询,那么不应该将它们作为常量放入。相反,您应该将表/查询合并到此查询中