我有一個查詢:優化SQL查詢運行
SELECT `l`.`id`, `l`.`headline`, `l`.`description`, `l`.`image`, `l`.`campaign_id`, IF(l.required_impressions=0,0,1) AS sequence, (IFNULL(ROUND(COUNT(DISTINCT(lc.id))/COUNT(DISTINCT(li.id)), 3) * 100, 0) * 0.3) + (l.cost * 0.7) AS `scales`, `c`.`name` AS `campaign`
FROM `app_links` AS `l`
INNER JOIN `app_campaigns` AS `c` ON c.id = l.campaign_id
LEFT JOIN `app_link_clicks` AS `lc` ON lc.link_id = l.id
LEFT JOIN `app_link_impressions` AS `li` ON li.link_id = l.id
LEFT JOIN `app_links_categories` AS `lcat` ON l.id = lcat.link_id
LEFT JOIN `app_links_countries` AS `lcou` ON l.id = lcou.link_id
WHERE lcat.category_id IN(3,7,14)
AND lcou.country_id IN(89,147,124,131,259,197,88)
GROUP BY `l`.`id`
ORDER BY sequence DESC, `scales` DESC
LIMIT 6
的EXPLAIN查詢返回:
你有什麼想法如何優化查詢?現在,它採取〜0.6秒,所以這是相當長的:/
取下提供模式來自查詢的'lcat'和'lcou'項,因爲它們沒有被引用? (或者用一個普通的'JOIN'替換'LEFT JOIN',的確如此) – wildplasser
是否有意使用'lcou.country_id'和'lcou'加入'LEFT JOIN'? 'lcat'的同一個問題。 – zerkms
@wildplasser:它們被用在'WHERE'裏。 – zerkms