MySQL巨大的IN设置为巨大的表

时间:2011-02-03 11:46:08

标签: mysql

尽可能考虑这个理论问题。

一个人有一个表,例如1.000.000+个用户记录,需要使用user_id从该表中提取数据,例如50.000。你怎么看待IN的表现?如果不好,它是唯一的选择还是还有什么可以尝试的?

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

IN功能实际上性能很差,所以这是我要避免的。大多数情况下,您可以使用联接查询,因此根据您的数据库结构,您应该明确支持通过IN语句进行联接。

答案 2 :(得分:0)

如果IN开始证明麻烦(正如其他回答者所说的那样,你可以尝试使用EXISTS重写你的查询。

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)

我经常发现这会加快速度。

答案 3 :(得分:-1)

使用JOIN选择所需的数据。