[英]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.