Mysql 单查询与多查询:执行时间和资源使用
我想知道使用包含很多值的“IN”限制的缺点是什么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子句中使用逗
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有一个很好的优化。它对列表进行排序,并对值进行二进制搜索
也就是说,如果列表来自另一个表/查询,那么不应该将它们作为常量放入。相反,您应该将表/查询合并到此查询中