有以下这些表:
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,速度甚至更慢,最终为整个查询检索相同的客户列表。也许有一种更好的方法可以避免子查询,任何更快的方式都会有所帮助,我不确定它是否会检索出准确正确的列表。
需要帮助吗?
COUNT
占用了太多时间。WHERE .. IN
也相当慢,但你可以通过使用LEFT JOIN
来改善它。 - Hearner