Mysql

如何檢查表中是否存在數組的所有元素?

  • November 9, 2021

讓我們在應用程序級別獲取一個大小為 n 的 id 數組。例如

$$ 132,3425,13,13,… 392 $$其中 n 大於 100k 條目。其中一些條目是重複的。 我需要檢查所有這些寄存器是否都包含在包含超過 5M 條目的 MySQL 表中。

現在我一個接一個地檢查,但是這個過程需要很長時間。

我怎樣才能在一次檢查中進行此驗證,或者使此驗證更有效。

我想知道它們是否都存在於桌子上,並且如果可能的話,知道哪些不存在於該桌子上。

首先計算不同數字的數量。你已經呼叫它了n。然後

SELECT COUNT(*) FROM tbl
   WHERE id IN (very-long-list)

看看是否返回n

相反,如果您將這些數字放在另一個表中,那麼這可能是最佳選擇:

Table `nums` contains the `n` values.
ALTER TABLE tbl ADD INDEX(id);  -- if it does not already exist.
SELECT ! EXISTS ( SELECT * FROM nums LEFT JOIN tbl USING(id)
                     WHERE tbl.id IS NULL )

這將檢查每個nums.id以查看它是否在您的tbl. 更重要的是,它會在找到第一個失去的項目時停止。輸出為 1 或 0。

(“very-long-list”是“commalist”或“comma-sparated-list”)

引用自:https://dba.stackexchange.com/questions/211355