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

前端之家收集整理的这篇文章主要介绍了SQL固定值IN()与INNER JOIN性能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在回答 this SQL question时,我遇到一个声明,固定值IN()运算符比具有相同内容的INNER JOIN慢得多,以至于最好为值创建临时表并加入它们.它是真的(通常,使用MysqL,任何其他sql引擎),如果是 – 为什么?直觉上,IN应该更快 – 您将潜在匹配与已经在内存中并且需要格式的固定值集进行比较,而使用JOIN时,您必须查询索引,可能从磁盘加载数据,以及执行IN可能不需要的其他操作.我错过了重要的事吗?

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

解决方法

这与IN子句的长度有关 – 在MysqL中有时称为BUG.

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

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

请参阅这些MysqL手册页

> In Subquery considerations
> In (constant list) performance

我可能是错的,因为它似乎意味着IN(常量值列表)应该总是对每个项目使用二进制搜索

猜你在找的MsSQL相关文章