我有订阅者的数据电子邮件。这就是我正在做的事情:
select
email
from
data_list
where
email NOT IN (
select
email_subscribe
from
subscribe
)
这需要很多时间。有关如何改进它的任何建议吗?
data_list = 50.000电子邮件
订阅表= 1000万封电子邮件
答案 0 :(得分:5)
explain query plan
将为您提供最佳方向。
但是,仅从查询本身判断,您应首先检查的是data_list.email
列和subscribe.email_subscribe
上的index。
您可以尝试做的另一件事是将IN
变成JOIN
。 MySQL优化器可能已经为你做了这个,但它有可能将订阅中的所有1000万行转换为多个OR
。
select
d.email
from
data_list d
left join subscribe s
on (d.email=s.email_subscribe)
where
s.email_subscribe is null
答案 1 :(得分:1)
请改用以下查询。确保 data_list.email 和 subscribe.email_subscribe 在其表格中编制索引,以获得更好的效果:
SELECT data_list.email
FROM data_list LEFT JOIN subscribe ON subscribe.email_subscribe = data_list.email
WHERE subscribe.email_subscribe IS NULL