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

-1 mysql sql

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

select
  email
from
  data_list
where
  email NOT IN (
     select
        email_subscribe
     from
       subscribe
  ) 
Run Code Online (Sandbox Code Playgroud)

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

data_list = 50.000电子邮件

订阅表= 1000万封电子邮件

小智 5

一个explain query plan会给你最好的方向.

但是,仅从查询本身判断,您应该检查的第一件事是您在列上有一个索引.data_list.emailsubscribe.email_subscribe

你可以尝试做的另一件事就是把你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
Run Code Online (Sandbox Code Playgroud)