簡體   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