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 子句的主要内容,如果未能解决你的问题,请参考以下文章