Mysql
如何檢查表中是否存在數組的所有元素?
讓我們在應用程序級別獲取一個大小為 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”)