从数据库中选择需要花费大量时间使用php

时间:2017-10-26 15:39:20

标签: mysql sql

我有订阅者的数据电子邮件。这就是我正在做的事情:

select
  email
from
  data_list
where
  email NOT IN (
     select
        email_subscribe
     from
       subscribe
  ) 

这需要很多时间。有关如何改进它的任何建议吗?

data_list = 50.000电子邮件

订阅表= 1000万封电子邮件

2 个答案:

答案 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