SQL固定值IN()与INNER JOIN性能

Sta*_*asM 6 mysql sql

在回答这个SQL问题时,我遇到一个声明,即固定值IN()运算符比INNER JOIN使用相同内容慢得多,以至于最好为值创建临时表并加入它们.它是真的(通常,使用MySQL,任何其他SQL引擎),如果是 - 为什么?直观地说,IN应该更快 - 你将潜在匹配与已经在内存中并且需要格式的固定值集进行比较,而使用JOIN,你必须查阅索引,可能从磁盘加载数据,并执行IN可能不需要的其他操作.我错过了重要的事吗?

请注意,与这个问题不同,它有很多重复,我说的是IN()有固定的值集,而不是子查询.

Ric*_*iwi 7

这与IN子句的长度有关 - 在MySQL中有时也称为BUG.

MySQL似乎具有IN子句的低阈值,当它将交换到TABLE/INDEX SCAN而不是收集多个分区(每个IN项一个)并合并它们时.

使用INNER JOIN,它几乎总是被迫在JOIN集合中使用直接逐行,这就是它有时更快的原因

请参阅这些MySQL手册页

我可能是错的,因为它似乎暗示IN (constant value list)应该总是在每个项目上使用二进制搜索...