我在debian上使用python2.7和mysql5.5。
使用此查询mysql使用100%cpu:
?
任何可能出错的提示?
答案 0 :(得分:1)
将HAVING
更改为WHERE
。
根据此进程列表,您的查询是将结果集传递给您的客户端(您的python程序)。除非结果集确实非常大,否则很少在此状态下查看查询。
您的查询(如编写)将contacts
表中的每一行都返回给您的python程序。如果您只想返回与contacts
行相关的mails
行MANDRILL_ID = 'fea4b3b036b44655a7e24121ac359d0a'
,请将LEFT JOIN
更改为JOIN
。
答案 1 :(得分:1)
以下是编写查询的正确方法:
SELECT c.ID, c.RATING, c.MANDRILL_ID
FROM contacts c JOIN
mails m
ON m.CONTACT_ID = c.ID
WHERE m.MANDRILL_ID = 'fea4b3b036b44655a7e24121ac359d0a';
对于性能,您需要以下索引:mails(mandrill_id, contact_id)
和contacts(id)
(您可能拥有后者)。
注意:
left join
上的条件,join
仍被转为mails
。having
子句应该主要用于group by
。 MySQL有一个扩展,但你不需要它。使用where
。having
可能会阻止优化器选择最佳优化路径。