拥有这些表:优化MySQL查询删除子查询
customers
---------------------
`id` smallint(5) unsigned NOT NULL auto_increment,
`name` varchar(100) collate utf8_unicode_ci default NOT NULL,
....
customers_subaccounts
-------------------------
`companies_id` mediumint(8) unsigned NOT NULL,
`customers_id` mediumint(8) unsigned NOT NULL,
`subaccount` int(10) unsigned NOT NULL
我需要得到谁被分配一个以上的子账户在同一家公司的所有客户。
这是我的本钱:
SELECT * FROM customers
WHERE id IN
(SELECT customers_id
FROM customers_subaccounts
GROUP BY customers_id, companies_id
HAVING COUNT(subaccount) > 1)
该查询太慢,虽然。如果我在子查询的SELECT中添加DISTINCT修饰符到customers_id,它最终会为整个查询检索相同的客户列表。也许有没有subquerying更好的方法,更快的事情会有所帮助,我不确定它是否会检索一个准确的正确列表。
任何帮助?
我认为这是您的“COUNT”,需要太多时间。 'WHERE .. IN'也很慢,但你可以通过使用'LEFT JOIN'来改善它。 – Hearner
@Hearner感谢您的建议。是的,我知道这一点。这实际上是由于子查询。 – user3514092