我想知道以下两种方法在性能方面是否有什么不同

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?

编辑:由于 comments 中所述的原因,将AND改为OR.

推荐答案

公认的答案并不能解释原因.

以下引用高性能MySQL第三版.

在许多数据库服务器中,In()只是多个OR子句的同义词,因为两者在逻辑上是等价的.MySQL则不然,它对in()列表中的值进行排序,并使用快速二进制搜索查看列表中是否有值.这是列表大小中的O(logn),而一系列等价的OR子句是列表大小中的O(n)(即,对于大型列表,速度要慢得多)

Mysql相关问答推荐

在MySQL中存储一条帖子的点赞数量

计算男生的人数和女生的人数.学生是有入学记录的人

MySQL 8.0.33 Select json列时出现错误:排序内存不足,请考虑增加服务器排序缓冲区大小

Select 构成每天聚合 MAX 的各个行

Travis 构建失败并出现错误 LOAD DATA LOCAL INFILE 文件请求因访问限制而被拒绝

根据 MySql 中同一表中的多列 Select 多列

任何值的 SQL WHERE 子句?

MySQL - 单词边界的正则表达式,不包括下划线(连接标点符号)

根据单个日期字段获取范围/天数

此更新查询是否有任何可能的重写选项?

MySQL如何在小时和分钟之间 Select 时间

MySQL在定义表的位置后抛出错误

MYSQL LOAD DATA INFILE 语句适用于工作台,但不适用于 python

MySQL 如何处理并发插入?

在 MySQL 的存储过程中调用存储过程

没有 JDBC 类型的方言映射:1111

Amazon RDS Aurora 与 RDS MySQL 与 EC2 上的 MySQL?

MySQL:按字段排序,将空单元格放在末尾

警告:mysqli_connect(): (HY000/1045): Access denied for user 'username'@'localhost' (using password: YES)

如何使 MySQL 的 NOW() 和 CURDATE() 函数使用 UTC?