MySQL Query with Very Large“WHERE ... IN(...)”

oxcyiej7  于 2023-04-05  发布在  Mysql
关注(0)|答案(2)|浏览(130)

我有一个表,大约有4,000,000名用户连接了他们的Epic Games和/或Discord帐户。这个表有discord_idepic_id的可见索引。
我也有一个Discord服务器,它有160,000个成员。并非所有这些成员都连接了一个帐户,因此不会出现在表中。
我想查询我的服务器中已连接Epic Games帐户的成员的表。我想基本的方法是...

SELECT discord_id, epic_id FROM users WHERE discord_id IN (?);

...其中?是160,000个潜在discord_id的数组。这是最好的方法吗?
我看过related question,它讨论了大量IN运算符性能损失的原因。然而,这个问题并没有提供替代方案--除了作者分块查询,或者其他人建议改变变量。
有没有其他选择,或者这是我唯一的选择?这是你会在生产中使用的东西吗?
例如,我是否可以在服务器中保存一个最新的discord_id表,然后在users表中查询另一个表中存在的discord_id

kr98yfug

kr98yfug1#

如果没有关于模式及其结构的更多信息,那么使用一个“缓存”表列出服务器中的用户(使用user_id或discord_id)肯定会给予更好的性能,也许可以通过触发器更新它。
如果epic_idNULL,如果用户没有链接他们的帐户,那么你也可以过滤掉这些。

h22fl7wq

h22fl7wq2#

如何生成discord_ids的列表?
假设信息在另一个表中,将JOIN添加到该表中。这将比两个步骤(1:查找列表; 2:运行大IN)。

相关问题