MySQL NOT IN 查询响应时间过长

标签 mysql notin

查询响应时间太长,大约需要 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)
  • 频率变量 (2)
  • 130000 行带有 where 子句
  • 总行数 160000
  • consumer_id 的唯一索引
  • active_flag 上的索引

事务表有

  • consumer_id varchar(12)
  • active_flag varchar(6)
  • 状态变量 (20)
  • 循环 varchar (13)
  • 108000 行带有 where 子句
  • 总行数 270000
  • consumer_id 状态和周期索引

服务器配置

-16GB 内存 -8 核英特尔(R) 至强(R) CPU E5-4640 v2 @ 2.20GHz -MySQL 5.6.35

解释返回 SQL QUERY EXPLAIN

希望对您有所帮助。 提前致谢。

更新 1

消费者和交易是一对多的关系 因此 consumer_id 将在每个周期重复。<​​/p>

最佳答案

使用左连接你会得到'NULL'值

试试 inner join 可能对你有帮助

SELECT c.consumer_id FROM consumer c
JOIN 
    (SELECT s.consumer_id as S_ID 
     FROM transactions s
     WHERE (s.cycle='2016-Q-2') and s.active_flag = 'Y' AND s.status <> 
    'Door Locked')
ON s.S_ID <> c.consumer_id
WHERE  c.active_flag = 'Y' AND ( c.frequency = 'Q' )

关于MySQL NOT IN 查询响应时间过长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42394864/

相关文章:

html - 如何使用 latin1_bin 集合以阿拉伯语打印姓名

php - 无法去除打印字 "Array"

mysql - 子查询优化

sql - tSQL 不在查询中

java - JPA、Spring Webservice 使用 NOT IN 和 IN 选择

php - 我无法让我的 PHP "else"条件 block 工作

mysql - 查找以 SearchString 开头的值

mysql - 如何列出各个列,其中每个列都包含 id 计数,其中每列中的 id 为 'not in' MySQL 中每列的不同表

php - 当 UserID = 1 且 CourseID 不在数组中时删除?

MySQL FIND_IN_SET 不工作