擁有這些表:優化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