繁体   English   中英

使用WHERE EXISTS条件时的性能问题

[英]performance issue when using WHERE EXISTS condition

我有两个表,用于保存GB的数据。

当我在任何一个表上使用“ WHERE EXISTS ...”执行查询时,整个MySQL都会崩溃。

查询示例:

DELETE FROM `records`  
where exists (
    select * 
    from `measurements` 
    where `file_id` = 17
    and measurements.id = records.measurement_id
    ) 

我不确定从哪里开始调试或如何解决。

一个查询示例,该查询在运行在不同数据库上的同一服务器上运行正常,但在主数据库上却永远存在

select * 
from `params` 
where exists (
    select * 
    from `records` 
    where `params`.`record_id` = `records`.`id` and exists (
        select * 
        from `measurements` 
        where `records`.`measurement_id` = `measurements`.`id`
            and `file_id` = 17"
    )
)

如果子查询返回任何行,则只需对整个表执行DELETE

DELETE FROM `records`;

我相信你想要相关的子查询:

DELETE FROM `records`  
where exists (
  select * 
  from `measurements` 
  where `file_id` = 17
   and `measurements`.col_name = `records`.col_name 
) ;

编辑:

您对相关部分是正确的。 查询仍然使数据库崩溃

您应该检查指标(要删除的初始表的百分比)。 如果超过20%到30%,我将简单地使用CTAs并重新创建表。

第二件事:您需要检查FK( ON DELETE CASCADE

我必须使用LEFT JOINs重写查询才能执行删除操作。 之所以“存在”花费太长时间的原因是,“存在”必须对照查询检查每个记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM