【发布时间】:2017-07-12 16:50:14
【问题描述】:
查询需要很长时间才能响应 ~ 40 分钟。
`SELECT c.consumer_id FROM consumer c
WHERE c.active_flag = 'Y'
AND ( c.frequency = 'Q' )
AND c.consumer_id NOT IN(
SELECT consumer_id
FROM (SELECT s.consumer_id
FROM transactions s
WHERE ( s.cycle='2016-Q-2' ) and s.active_flag = 'Y' AND s.status <> 'Door Locked')
AS subquery)`
我也尝试过同时使用上述查询的 NOT EXISTS 和 LEFT JOIN / IS NULL 版本。
consumer表有
- consumer_id varchar(12)
- active_flag varchar(6)
- 频率 varchar (2)
- 130000 行带有 where 子句
- 总行数 160000
- consumer_id 上的唯一索引
- active_flag 上的索引
transaction表有
- consumer_id varchar(12)
- active_flag varchar(6)
- 状态 varchar (20)
- 循环 varchar (13)
- 108000 行带有 where 子句
- 总行数 270000
- consumer_id 状态和周期索引
服务器配置
-16GB 内存 -8 核 Intel(R) Xeon(R) CPU E5-4640 v2 @ 2.20GHz -MySQL 5.6.35
解释退货 SQL QUERY EXPLAIN
我希望这会有所帮助。 提前致谢。
更新 1
消费者和交易是一对多的关系 所以 consumer_id 会在每个周期重复。
【问题讨论】:
-
能否请您也添加您的 JOIN 查询?