如果我有一个 mysql 查询,例如:
SELECT * FROM table1 WHERE id IN(1,2,3,4) LIMIT 2
mysql 会从表中返回 id 为 1 和 2 的行还是来自 1、2、3、4 的任意 2 个随机 id 的行?
如果我有一个 mysql 查询,例如:
SELECT * FROM table1 WHERE id IN(1,2,3,4) LIMIT 2
mysql 会从表中返回 id 为 1 和 2 的行还是来自 1、2、3、4 的任意 2 个随机 id 的行?
我不知道你的表结构、记录顺序和索引,所以我无法预测最终结果。
然而,对于这个精确的查询,除非你有一些奇怪的存储引擎,否则随机化是为了好玩(不是我知道的任何常见的 myslq 引擎),它总是结果集中的前两条记录。除非您更改表结构或记录,否则结果集应该始终相同。除非索引已更改或这些索引的相对基数已更改,否则查询优化器将始终计划和执行相同的操作。
它将返回它找到的前两条记录,其 id 在您指定的时间间隔内。但是,如果您不指定ORDER BY
子句,则无法保证将按特定顺序获取项目。
它返回在 中找到的前两条记录IN
,但除非您指定,否则order by
无法保证订单。数字是固定的(您的IN
子句中的匹配数限制 (<=)LIMIT
子句中指定的数字),顺序不是。现在通常可以说这是您的“主要”表
ID
1
3
2
4
这个查询
select * from main where id in (1,2,3,4) limit 2
返回
1
3
因为这就是表中值的方式。它返回数据存储的顺序(在正常的 MySQL 场景中)。有了订单,这变成了
select * from main where id in (1,2,3,4) order by id limit 2
返回
1
2