小编典典

MYSQL OR 与 IN 性能

all

我想知道以下之间的性能是否有任何区别

SELECT ... FROM ... WHERE someFIELD IN(1,2,3,4)

SELECT ... FROM ... WHERE someFIELD between 0 AND 5

SELECT ... FROM ... WHERE someFIELD = 1 OR someFIELD = 2 OR someFIELD = 3 ...

还是 MySQL 会以与编译器优化代码相同的方式优化 SQL?

编辑:出于评论中所述的原因,将 ‘s 更改为AND‘s 。OR


阅读 169

收藏
2022-07-01

共1个答案

小编典典

接受的答案没有解释原因。

以下引自高性能 MySQL,第 3 版。

在许多数据库服务器中,IN() 只是多个 OR 子句的同义词,因为两者在逻辑上是等价的。在 MySQL 中并非如此,它对 IN()
列表中的值进行排序并使用快速二进制搜索来查看值是否在列表中。这是列表大小的 O(Log n),而等效的一系列 OR 子句是列表大小的
O(n)(即,对于大型列表来说要慢得多)

2022-07-01