将其视为理论问题和实际问题。
假设有一个包含100万条用户记录的表格,并且需要仅使用user_id从该表格中提取50000个用户的数据。您认为IN操作符的行为会如何?如果不佳,是否只有这种选择,还是还有其他方法可以尝试?
将其视为理论问题和实际问题。
假设有一个包含100万条用户记录的表格,并且需要仅使用user_id从该表格中提取50000个用户的数据。您认为IN操作符的行为会如何?如果不佳,是否只有这种选择,还是还有其他方法可以尝试?
您可以将搜索值插入单个列临时表中,并在其上进行连接。当出现非常大的in子句时,我曾经见过其他数据库做出不好的反应。
IN操作的性能相当差,所以我建议避免使用它。大多数情况下,您可以通过使用连接查询来解决问题,因此根据您的数据库结构,您应该明确优先选择JOIN而不是IN语句。
IN (SELECT ... )
和IN (value1, value2, ...)
混淆了。前者因为速度慢而出名,但后者正在被重写成一系列的OR
语句,我认为你不能说OR
语句会很慢。 - MchlSELECT *
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)
我经常发现这样可以加快速度。
user_id
是唯一的,并且是where条件。他也没有指定任何其他条件...那你如何复制并加入呢?你能举个例子解释一下吗? - Anush Prem