I have 2 tables as below:
CREATE TABLE
ox_campaigns(campaignidmediumint(9) NOT NULL auto_increment,campaignnamevarchar(255) NOT NULL default '',clientidmediumint(9) NOT NULL default '0',is_deletedtinyint(1) NOT NULL default '0',
PRIMARY KEY (campaignid),
KEYox_campaigns_clientid(clientid)
) ENGINE=MyISAM DEFAULT CHARSET=utf8CREATE TABLE
ox_clients(clientidmediumint(9) NOT NULL auto_increment,agencyidmediumint(9) NOT NULL default '0',clientnamevarchar(255) NOT NULL default '',is_deletedtinyint(4) NOT NULL,
PRIMARY KEY (clientid),
UNIQUE KEYox_clients_account_id(account_id),
KEYox_clients_agencyid(agencyid)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
One client can have many campaigns linked to it.
I have a list of campaignids with me , what I want is a list of distinct clientids for those campaigns.
The query that I am using is:
SELECT clients.*
FROM
clients clients
JOIN
campaigns campaigns ON clients.clientid = campaigns.clientid
WHERE
campaigns.is_deleted=0
AND campaignid in (2325,2395)
AND clients.is_deleted=0
GROUP BY clients.clientid
The EXPLAIN output that it gives is :
+----+-------------+-----------+--------+-------------------------------+------+--------------------------------------------------------------------------------------------------------------------
| id | select_type | table | type | possible_keys | key | key_len| ref | rows| Extra |
+----+-------------+-----------+--------+-------------------------------+--------------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | campaigns | range | PRIMARY,ox_campaigns_clientid | PRIMARY | 3 | NULL | 2 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | clients | eq_ref| PRIMARY | PRIMARY | 3 | openx.campaigns.clientid | 1 | Using where
Why it is using temporary and filesorting for this query ?