IN vs = in Where 子句

Posted

技术标签:

【中文标题】IN vs = in Where 子句【英文标题】:IN vs = in Where Clauses 【发布时间】:2010-08-04 16:21:52 【问题描述】:

我尝试创建用于我的 s-s-rS 报告的标准化 SQL 脚本。如果我希望有这样的声明:

Select * from mytable

并在 where 子句中使用 SQL 变量(s-s-rS 参数),使用它是否有任何速度优势:

字段 = @MyField

VS。

输入字段 (@MyField)

我知道第二个选项同时支持多选和单选,而第一个选项只支持单选。

如果为了统一而使用 IN 语句编写所有查询,是否会影响性能?

【问题讨论】:

【参考方案1】:

没有性能影响。优化器将 IN 转换为一系列 = 运算 ORed 在一起。

附带说明一下,我希望您在实际查询中没有真正使用 SELECT *。

【讨论】:

不,当然不是。我只是在节省时间,而不是输入 Field1、field2 等。 为什么不选择 * ?或者至少在Room - android 中,就是这样。如果我错了,请纠正我。【参考方案2】:

对于一个参数,优化器将在实际执行语句中将该 IN 更改为 =。

因为这两个参数都是Sargeble (Joe Stefanelli 感谢关注);性能差异可以通过您在 in 子句中有序列值的地方找到,例如 IN (1,2,3,4,5,6)between 1 and 6 慢,因为对于 IN 来说,在这种情况下,必须为每个值读取索引 6 次,每次之间只有一次.

【讨论】:

经过一番谷歌搜索后,我必须承认你是对的,在一些开发博客上写到这也是不可原谅的。谢谢。 我注意到您对这个早先的问题提供了类似的答案。您可能还想修改该答案。 ***.com/questions/3353084/…【参考方案3】:

如果您的 IN 子句中有大量项目,性能确实会变慢

【讨论】:

以上是关于IN vs = in Where 子句的主要内容,如果未能解决你的问题,请参考以下文章

根据 WHERE IN 子句数据排序结果集

Where - OLAP Cube 中的 In 子句

在 where 子句中使用解码,并带有“in”

使用 WHERE 和 IN 子句的 MongoDB 查询

WHERE 子句 IN group_concat

在 c# where in 子句适用于整数?