【发布时间】:2014-04-08 22:40:45
【问题描述】:
我有几张表,每张表都有数百万条记录。其中一个表有一个潜在客户数据(带有 clicks 表中的 click_id 字段)。第二个(点击)具有 click_id 作为主键并具有 ad_id 字段(广告标签)。看起来像:
X_leads
身份证
领导ID
线索点击ID
另一个字段
X_click
click_id
ad_id
另一个字段
我需要获取包含潜在客户数量和我需要的 ad_id 标签的数据。
我有一个类似的查询:
SELECT
今天,一个查询可以工作 10 秒或更长时间。 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
我尝试自己优化它,但没有任何结果。
解释结果:
如何优化此查询?
谢谢
【问题讨论】:
-
通过提供适当的 DDL 和解释
-
大的
IN子句有什么用?可以用JOIN代替吗?您的查询中有一些列不在您的架构中。提供完整的架构,包括索引。 -
IN 有一个广告标签的 IDS。用户可以通过单击复选框来选择它。 (可以是 1 或 200)
-
@MarcusAdams 正如我所说,IN 有一个广告标签的 IDS,可以在表单中选择用户。我们不能用 JOIN 代替它。 X_click 表中的 ad_id 列。我无法显示完整的架构 - 它有很多表。
标签: mysql sql optimization group-by