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