首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子查询优化

子查询优化
EN

Stack Overflow用户
提问于 2015-03-27 09:52:37
回答 1查看 46关注 0票数 1

我正在阅读这篇文章-- 非IN与不存在与左联接/IN:解释扩展处的MySQL;我正在使用一个现有的设计。

我想要的是能够从table a中选择所有id,这些id不在table b中。

我正在使用以下查询:

代码语言:javascript
复制
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输出

代码语言:javascript
复制
*************************** 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

任何帮助都会很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-06 03:02:13

我想要的是能够从表a中选择所有id,这些id不在表b中

在包含索引列的WHERE子句中使用关联子查询。例如:

代码语言:javascript
复制
SELECT U.Id
FROM Users U
WHERE (SELECT Count(Ph.UserId) FROM PostHistory Ph WHERE Ph.UserId = U.Id) = 0

参考资料

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29297746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档