2011-02-03 57 views
4

尽可能考虑这个理论问题。MySQL巨大的IN设置为巨大的表

其中有一张表格,例如用户数量为1.000.000以上的记录,并且需要为该表格中的50.000个数据提取数据,仅使用user_id。你如何期望IN行为?如果不好,是唯一的选择还是还有别的方法可以尝试?

回答

2

IN功能其实性能相当差,所以这是我会避免的。大多数情况下,您可以通过使用联合查询来解决问题,因此根据数据库结构,您应该明确支持通过IN语句进行联接。

+3

认为你在IN(value1,value2,...)中混淆了IN(SELECT ...)`,第一个实际上是因为速度慢而臭名昭着第二个然而,一个正在被扭转听着一系列`OR`s,我不认为你可以说`OR`s很慢。 – Mchl 2011-02-03 19:27:23

-1

使用JOIN选择您需要的数据。

3

您可以将您的搜索值插入单列临时表并加入。我看到其他数据库在出现非常大的子句时会做坏事。

+0

嗯。我不明白这是怎么可能的。 `user_id`是唯一的,并且是where条件。他也没有详细说明其他条件。那么你将如何复制和加入?你能否用一个例子解释一下? – 2011-02-03 13:07:29

0

如果在开始证明麻烦(其他应答者都建议说,你可以尝试重写使用您的查询存在代替。

SELECT * 
    FROM MYTAB 
    WHERE MYKEY IN (SELECT KEYVAL 
         FROM MYOTHERTAB 
         WHERE some condition) 

可能成为

SELECT * 
    FROM MYTAB 
    WHERE EXISTS (SELECT * 
         FROM MYOTHERTAB 
         WHERE some condition AND 
          MYTAB.MYKEY = MYOTHERTAB.KEYVAL) 

我常常发现这加快速度提高了一点点