Mysql where column=id vs where column in(id)

Mysql where column=id vs where column in(id),mysql,Mysql,我想知道我们为什么要使用 where column=id vs 我知道第一个只允许一个id,而第二个将允许多个id,但是为什么我们不总是在中使用,即使是单列搜索 换句话说,为什么我们不总是使用“where column In(id)”?这两者本质上是相同的,因此可以互换。使用哪一个是个人的喜好 就我个人而言,当我知道永远不会检查多个值时,我会使用=。如果以后有机会修改查询以向列表中添加新值,我会在中使用 当性能不是一个问题时,我有时使用REGEXP,而不是,因为它更简洁,需要更少的键入: WH

我想知道我们为什么要使用

where column=id
vs

我知道第一个只允许一个id,而第二个将允许多个id,但是为什么我们不总是在中使用,即使是单列搜索


换句话说,为什么我们不总是使用“where column In(id)”?

这两者本质上是相同的,因此可以互换。使用哪一个是个人的喜好

就我个人而言,当我知道永远不会检查多个值时,我会使用
=
。如果以后有机会修改查询以向列表中添加新值,我会在中使用

当性能不是一个问题时,我有时使用
REGEXP
,而不是
,因为它更简洁,需要更少的键入:

WHERE column REGEXP '^(value1|value2)$'

WHERE列REGEXP'[[::]]
当然,不太广为人知的“空安全”相等运算符

WHERE列id

版本中没有等效的

对其进行基准测试!我很好奇是否有任何性能差异。我想这是因为性能原因。想象一下:你得到了一个“我想要这个ID”。引擎遍历每一行并检查ID是否匹配。现在,想象一下项目列表也是这样。对于每一行,它需要遍历列表并询问“它是其中之一吗?”?即使其中只有一个,它仍然需要遍历“one”。实际上,我有一个数据库api,它在(value)
的getRecord函数中总是使用
in(value)
——到目前为止,它没有任何问题。我猜mysql会在某个时候将其优化为
=
WHERE column REGEXP '^(value1|value2)$'
WHERE column REGEXP '[[:<:]](value1|value2)[[:>:]]'
WHERE column <=> id