title: MySql , JOIN and Group By query is Using temporary and Filesort
body: <p>I have 2 tables as below:</p>
  <pre class="lang-sql prettyprint-override"><code>CREATE TABLE `ox_campaigns` (                                                       
      `campaignid` mediumint(9) NOT NULL auto_increment,                                
      `campaignname` varchar(255) NOT NULL default '',                                  
      `clientid` mediumint(9) NOT NULL default '0',                                                                                                    
      `is_deleted` tinyint(1) NOT NULL default '0',                                        
      PRIMARY KEY  (`campaignid`),                                                      
      KEY `ox_campaigns_clientid` (`clientid`)                                          
  ) ENGINE=MyISAM DEFAULT CHARSET=utf8  
  </code></pre>
  <pre class="lang-sql prettyprint-override"><code>CREATE TABLE `ox_clients` (                                   
    `clientid` mediumint(9) NOT NULL auto_increment,            
    `agencyid` mediumint(9) NOT NULL default '0',               
    `clientname` varchar(255) NOT NULL default '',                                                                
    `is_deleted` tinyint(4) NOT NULL,                           
    PRIMARY KEY  (`clientid`),                                  
    UNIQUE KEY `ox_clients_account_id` (`account_id`),          
    KEY `ox_clients_agencyid` (`agencyid`)                      
  ) ENGINE=MyISAM DEFAULT CHARSET=utf8              
  </code></pre>
  <p>One client can have many campaigns linked to it.</p>
  <p>I have a list of campaignids with me , what I want is a list of distinct clientids for those campaigns.</p>
  <p>The query that I am using is:</p>
  <pre class="lang-sql prettyprint-override"><code>SELECT clients.* 
      FROM clients  
      JOIN 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
  </code></pre>
  <p>The EXPLAIN output that it gives is :</p>
  <pre class="lang-none prettyprint-override"><code>+----+-------------+-----------+-------+-------------------------------+---------+--------+-------------------------------------------------------------------------------+
  | 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
  </code></pre>
  <p>Why it is using temporary and filesorting for this query ?</p>