Dan*_*tos 5 mysql performance exists
让我们在应用程序级别获取一个大小为 n 的 id 数组。例如 [132,3425,13,13,... 392] 其中 n 大于 100k 个条目。其中一些条目是重复的。
我需要检查所有这些寄存器是否都包含在包含超过 5M 条目的 MySQL 表中。
现在我正在一个一个地检查,但是这个过程需要很长时间。
我如何在一次检查中进行此验证,或者如何提高效率。
我想知道是否所有这些都存在于桌子上,并且如果可能的话,知道该桌子上尚不存在哪些。
首先计算不同数字的数量。你已经称呼它了n
。然后
SELECT COUNT(*) FROM tbl
WHERE id IN (very-long-list)
Run Code Online (Sandbox Code Playgroud)
看看是否会返回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 )
Run Code Online (Sandbox Code Playgroud)
这将检查每个nums.id
以查看它是否在您的tbl
. 更重要的是,当找到第一个丢失的物品时,它就会停止。输出为 1 或 0。
(“very-long-list”是“commalist”或“comma-sparated-list”)
归档时间: |
|
查看次数: |
40340 次 |
最近记录: |