MySQL WHERE ... IN 的性能表现

9

我有一些包含WHERE IN语句的MySQL查询。

SELECT * FROM table1 WHERE id IN (1, 2, 15, 17, 150 ....)

当IN子句中有数百个ID时,它的性能如何?它是否设计用于处理多个参数?(我的表将有数十万行,ID是主字段)

是否有更好的方法来做到这一点?

编辑:我从搜索服务器查询的结果集中获取ID。因此,不是从数据库中获取。我猜联接语句行不通。


2
不知道你问题的答案,但如果你的IN子句非常大,也许使用一个带有一些选择表的JOIN会更好? - Xophmeister
1
如果你已经准备好了所有的工具和数据,为什么不自己尝试一下基准测试呢? - darma
3
也许稍微多一点背景信息会有所帮助,包括您如何在第一步中组装“IN”语句。我曾经在SQL Server中使用表值参数来完成这样的操作,但我不确定这是否适用于此处的情况。 - D. Lambert
已更新问题并附上ID来源。 - applechief
@darma 我没有足够的数据来尝试。 - applechief
显示剩余2条评论
2个回答

3

如果他有成千上万个值要放入IN子句中,他不应该执行任何ORIN选择。 - aF.
他不应该这样做。链接后面有答案,其中提到了性能方面的一些讨论。我认为这与这个问题有关。 - PiTheNumber

2

例如,您应该将IN子句“参数”放入table2中。

之后,您需要执行以下操作:

SELECT t1.* FROM table1 t1
INNER JOIN table2 t2 ON t1.Id = t2.Id

那么你的意思是我将我的ID集添加到一个新表中并进行连接吗? - applechief
@chaft,这是最明智的方法:P - aF.
你好,这会导致更好或更差的性能吗?因为我听说JOIN会导致性能不佳...谢谢! - ch271828n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接