我正在阅读这篇文章-- 非IN与不存在与左联接/IN:解释扩展处的MySQL;我正在使用一个现有的设计。
我想要的是能够从table a中选择所有id,这些id不在table b中。
我正在使用以下查询:
SELECT a.* FROM `orders` a LEFT JOIN `orders_corrected` b ON
a.`order_id`=b.`order_id` WHERE b.`order_id` IS NULL;Table a包含超过900 K记录,Table b包含超过200 K和生长。
上面的查询大约需要7-8分钟。
我还尝试使用NOT IN,这也很慢。
order_id列不是NULL和唯一索引。
explain输出
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: a
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 595783
Extra: NULL
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: b
type: eq_ref
possible_keys: PRIMARY,order_id_UNIQUE,ix_order_id
key: PRIMARY
key_len: 152
ref: func
rows: 1
Extra: Using where; Not exists; Using index任何帮助都会很好。
发布于 2017-07-06 03:02:13
我想要的是能够从表a中选择所有id,这些id不在表b中
在包含索引列的WHERE子句中使用关联子查询。例如:
SELECT U.Id
FROM Users U
WHERE (SELECT Count(Ph.UserId) FROM PostHistory Ph WHERE Ph.UserId = U.Id) = 0参考资料
https://stackoverflow.com/questions/29297746
复制相似问题