我有一个表,大约有4,000,000名用户连接了他们的Epic Games和/或Discord帐户。这个表有discord_id
和epic_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
?
2条答案
按热度按时间kr98yfug1#
如果没有关于模式及其结构的更多信息,那么使用一个“缓存”表列出服务器中的用户(使用user_id或discord_id)肯定会给予更好的性能,也许可以通过触发器更新它。
如果
epic_id
是NULL
,如果用户没有链接他们的帐户,那么你也可以过滤掉这些。h22fl7wq2#
如何生成
discord_ids
的列表?假设信息在另一个表中,将
JOIN
添加到该表中。这将比两个步骤(1:查找列表; 2:运行大IN)。