具有大量记录的查询优化

时间:2014-04-08 14:02:43

标签: mysql sql optimization group-by

我有几张桌子,每张桌子都有数百万条记录。其中一个表有一个潜在客户数据(点击表中的click_id字段)。第二次(点击)将click_id作为主键,并具有ad_id字段(广告标签)。看起来像:

X_leads

ID
lead_id
lead_click_id
another_fields

X_click

click_id
ad_id
another_fields

我需要获取带有潜在客户数量的数据以及我需要的ad_id标签 我有一个类似的查询:

SELECT C.ad_id AS lead_ad_id, COUNT(DISTINCT L.lead_id) AS leads
FROM X_leads AS L
INNER JOIN X_click AS C ON L.lead_click_id=C.click_id
WHERE (C.shop_id=223) AND (L.owner_id=223)
AND (L.lead_active=1) AND (L.lead_invalid=0)
AND (C.ad_id IN (11, 180, 181, ... {it can be hundred of ids}...))
GROUP BY L.lead_ad_id
今天,一个查询可以工作10秒或更长时间。
我试图自己优化它,但没有任何结果。

解释结果:
enter image description here
enter image description here

如何优化此查询?
感谢

1 个答案:

答案 0 :(得分:0)

使用explain_plan并避免全表扫描,以避免它使用您在where条件中使用的字段强制索引。 http://dev.mysql.com/doc/refman/5.1/en/index-hints.html