尽可能考虑这个理论问题。
一个人有一个表,例如1.000.000+个用户记录,需要使用user_id从该表中提取数据,例如50.000。你怎么看待IN的表现?如果不好,它是唯一的选择还是还有什么可以尝试的?
答案 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选择所需的数据。