Not really, the query took 4-5 seconds. The query runs through 13910 rows according to explain, that isnt alot is it?
SELECT COUNT(*) antal,ad.ad_id FROM ad INNER JOIN tag_ad_map tm ON tm.ad_id=ad.ad_id WHERE tm.tag_id IN (99, 10807, 20728, 21, 135) AND ad.is_removed = 0 AND ad.is_active=1 AND (ad.ant_feedback_alert <= 5 OR ad.whitelisted = 1) AND tm.is_active=1 AND ad.ad_id != 32793 GROUP BY tm.ad_id ORDER BY antal DESC LIMIT 10 2009/1/14 Walter Heck <li...@olindata.com> > One optimization I see quickly is changing the left join to an inner join. > You always look for records that exist in tag_ad_map (by checking for > tm.is_active) so the left join is not necessary. That should at least speed > this query up considerably. > > Walter > > Need MySQL advice? > OlinData.com is the place to go! (http://www.olindata.com) > > > > SELECT COUNT(*) antal,ad.ad_id FROM ad >> >> LEFT JOIN tag_ad_map tm ON tm.ad_id=ad.ad_id >> >> WHERE >> >> tm.tag_id IN (99, 10807, 20728, 21, 135) >> >> AND ad.is_removed = 0 AND ad.is_active=1 AND (ad.ant_feedback_alert <= 5 >> OR >> ad.whitelisted = 1) >> >> AND tm.is_active=1 AND ad.ad_id != 32793 >> >> GROUP BY tm.ad_id ORDER BY antal DESC LIMIT 10 >> >>