查询需要很长时间才能响应〜40分钟。MySQL NOT IN查询花费太长的时间来响应
`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上的唯一索引
- in DEX上active_flag
transaction
表具有
- consumer_id VARCHAR(12)
- active_flag VARCHAR(6)
- 状态VARCHAR(20)
- 周期VARCHAR(13)
- 108000行,其中有条款
- 总排数270000
- 指数consumer_id状态和循环
服务器配置
-16GB RAM -8核Intel(R)至强(R)CPU E5-4640 V2 @ 2.20GHz -MySQL 35年5月6日
解释回报 SQL QUERY EXPLAIN
我希望这有助于。 在此先感谢。
更新1
消费和交易有一个一对多的关系 所以consumer_id会重复每一个周期。
请问您还可以添加您的JOIN查询吗? – marijnz0r