mysql连接查询占用了太多资源

时间:2015-05-26 11:25:54

标签: mysql join debian left-join

我在debian上使用python2.7和mysql5.5。

使用此查询mysql使用100%cpu:

?

任何可能出错的提示?

2 个答案:

答案 0 :(得分:1)

HAVING更改为WHERE

根据此进程列表,您的查询是将结果集传递给您的客户端(您的python程序)。除非结果集确实非常大,否则很少在此状态下查看查询。

您的查询(如编写)将contacts表中的每一行都返回给您的python程序。如果您只想返回与contacts行相关的mailsMANDRILL_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可能会阻止优化器选择最佳优化路径。
  • 表别名使查询更易于编写和阅读。