查詢需要很長時間才能響應〜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