Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询执行时间太长_Mysql_Sql_Performance_Mysql Workbench_Database Administration - Fatal编程技术网

Mysql 查询执行时间太长

Mysql 查询执行时间太长,mysql,sql,performance,mysql-workbench,database-administration,Mysql,Sql,Performance,Mysql Workbench,Database Administration,我目前在一个数据库中有两个表。这两个表都有一个名为Email的列。现在我想比较这两个表,无论电子邮件匹配到哪里,我都想将电子邮件表中名为email\u status\u id的列更新为2…我使用的查询是 UPDATE Email E SET E.Email_status_id = 2 WHERE E.Email IN ( SELECT U.Email FROM UNSUSCRIBED U); 我目前正在使用mysql 电子邮件表有2704

我目前在一个数据库中有两个表。这两个表都有一个名为Email的列。现在我想比较这两个表,无论电子邮件匹配到哪里,我都想将电子邮件表中名为email\u status\u id的列更新为2…我使用的查询是

UPDATE  Email E
SET E.Email_status_id = 2
WHERE 
    E.Email
  IN (
    SELECT 
     U.Email
    FROM 
     UNSUSCRIBED U);
我目前正在使用mysql

电子邮件表有2704569行电子邮件 未订阅的表有12102行电子邮件

查询执行时间将花费很长时间


任何减少查询执行时间的建议…

您正在对
in
子句中的
中的大量数据进行字符串比较。由于您实际上不需要返回数据,因此可以在
Exists
中执行此操作:

Update  Email E
Set     E.Email_status_id = 2
Where Exists
(
    Select  1
    From    Unsubscribed    U
    Where   U.Email = E.Email
)

除此之外,在
Email
Unsubscribed
表中的
Email
列中选择适当的选项也会提高您的性能。

您在
in
子句中对
中的大量数据进行字符串比较。由于您实际上不需要返回数据,因此可以在
Exists
中执行此操作:

Update  Email E
Set     E.Email_status_id = 2
Where Exists
(
    Select  1
    From    Unsubscribed    U
    Where   U.Email = E.Email
)

除此之外,在
Email
Unsubscribed
表中的
Email
列中选择适当的选项也会提高您的性能。

您在
in
子句中对
中的大量数据进行字符串比较。由于您实际上不需要返回数据,因此可以在
Exists
中执行此操作:

Update  Email E
Set     E.Email_status_id = 2
Where Exists
(
    Select  1
    From    Unsubscribed    U
    Where   U.Email = E.Email
)

除此之外,在
Email
Unsubscribed
表中的
Email
列中选择适当的选项也会提高您的性能。

您在
in
子句中对
中的大量数据进行字符串比较。由于您实际上不需要返回数据,因此可以在
Exists
中执行此操作:

Update  Email E
Set     E.Email_status_id = 2
Where Exists
(
    Select  1
    From    Unsubscribed    U
    Where   U.Email = E.Email
)

除此之外,在
Email
Unsubscribed
表中的
Email
列中选择适当的选项也会提高您的性能。

针对整个表的in语句通常比较慢。这是因为它必须对表中的每一行运行子查询,以获得过滤后的结果集。尝试改用联接,如下所示:

Update Unsubscribed U join Email E on E.Email=U.Email
SET E.email_status_id = 2

针对整个表的IN语句通常比较慢。这是因为它必须对表中的每一行运行子查询,以获得过滤后的结果集。尝试改用联接,如下所示:

Update Unsubscribed U join Email E on E.Email=U.Email
SET E.email_status_id = 2

针对整个表的IN语句通常比较慢。这是因为它必须对表中的每一行运行子查询,以获得过滤后的结果集。尝试改用联接,如下所示:

Update Unsubscribed U join Email E on E.Email=U.Email
SET E.email_status_id = 2

针对整个表的IN语句通常比较慢。这是因为它必须对表中的每一行运行子查询,以获得过滤后的结果集。尝试改用联接,如下所示:

Update Unsubscribed U join Email E on E.Email=U.Email
SET E.email_status_id = 2

第一件事是在
取消订阅(电子邮件)
上创建索引:

或者,更好的方法是将其声明为
主键
,尤其是当它是表中唯一的列时

然后,MySQL有时在
中实现
时做得很差。有多种方法可以使用索引编写查询<代码>存在
是一种典型的方法:

update email e
     set email_status_id = 2
     where exists (select 1 from unsubscribed u where u.email = e.email);
join
版本应具有与索引类似的性能

编辑:


电子邮件(email)
上的索引也有助于查询。出于某种原因,我假设这已经是表中的一个键。

第一件事是在
取消订阅(电子邮件)
上创建索引:

或者,更好的方法是将其声明为
主键
,尤其是当它是表中唯一的列时

然后,MySQL有时在
中实现
时做得很差。有多种方法可以使用索引编写查询<代码>存在
是一种典型的方法:

update email e
     set email_status_id = 2
     where exists (select 1 from unsubscribed u where u.email = e.email);
join
版本应具有与索引类似的性能

编辑:


电子邮件(email)
上的索引也有助于查询。出于某种原因,我假设这已经是表中的一个键。

第一件事是在
取消订阅(电子邮件)
上创建索引:

或者,更好的方法是将其声明为
主键
,尤其是当它是表中唯一的列时

然后,MySQL有时在
中实现
时做得很差。有多种方法可以使用索引编写查询<代码>存在
是一种典型的方法:

update email e
     set email_status_id = 2
     where exists (select 1 from unsubscribed u where u.email = e.email);
join
版本应具有与索引类似的性能

编辑:


电子邮件(email)
上的索引也有助于查询。出于某种原因,我假设这已经是表中的一个键。

第一件事是在
取消订阅(电子邮件)
上创建索引:

或者,更好的方法是将其声明为
主键
,尤其是当它是表中唯一的列时

然后,MySQL有时在
中实现
时做得很差。有多种方法可以使用索引编写查询<代码>存在
是一种典型的方法:

update email e
     set email_status_id = 2
     where exists (select 1 from unsubscribed u where u.email = e.email);
join
版本应具有与索引类似的性能

编辑:


电子邮件(email)
上的索引也有助于查询。出于某种原因,我假设这已经是表中的一个键。

可能是一个更好的地方,但在任何情况下,都不能在不显示表架构的情况下进行评估。您是否在
Email.Email
列上有索引?需要更多信息。索引?另外,我不认为这是一个DBA问题。这只是一个查询/索引调优。如果这两个表的
Email
字段上都没有索引,那么这将是一个很好的起点。这可能是一个更好的地方,但在任何情况下,都不能在不显示表架构的情况下进行评估。您是否在
Email.Email
列上有索引?需要更多信息。索引?而且,我不认为我