答案 0 :(得分:2)
由您的数据决定。
我找到了另一个答案:
使用“IN”,因为它最有可能使DBMS在其上使用索引 相应栏目。
“NOT IN”理论上也可以转化为索引用法,但是 以更复杂的方式,DBMS可能不会“花费开销时间” 使用
答案 1 :(得分:1)
根据documentation,带有常量列表的in
实现二进制搜索:
然后使用二分搜索完成对项目的搜索。这个 如果IN值列表完全由IN组成,则表示IN非常快 常数。
未明确声明NOT IN
的处理方式相同,但基于此假设是合理的:
- expr NOT IN(value,...)
这与NOT(expr IN(value,...))相同。
这会在性能方面留下两个可能的差异。第一个是索引使用。因为NOT IN
被记录为主要使用IN
,所以我希望索引优化是相同的。这是一种期望,但可能不正确。
第二,与NOT IN
的比较与IN
的比较较少。这将导致NOT IN
更快 - 但鉴于MySQL使用的二进制搜索方法,差异小于微观。换句话说,这不应该有所作为。
最后,如果你使用的是子查询,那么所有的赌注都会被取消。 NOT IN
必须处理整个列表以检查该值是否真的不在列表中。 IN
可以在第一场比赛时停止处理。在某些情况下,这可能会对绩效产生影响。
答案 2 :(得分:1)
因为NOT IN
只是NOT (IN)
。它总是比IN
多一步。 NOT IN
取IN
的结果然后否定它。