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
>>
>>

Reply via email to