2

如果我有一个 mysql 查询,例如:

SELECT * FROM table1 WHERE id IN(1,2,3,4) LIMIT 2

mysql 会从表中返回 id 为 1 和 2 的行还是来自 1、2、3、4 的任意 2 个随机 id 的行?

4

3 回答 3

1

我不知道你的表结构、记录顺序和索引,所以我无法预测最终结果。

然而,对于这个精确的查询,除非你有一些奇怪的存储引擎,否则随机化是为了好玩(不是我知道的任何常见的 myslq 引擎),它总是结果集中的前两条记录。除非您更改表结构或记录,否则结果集应该始终相同。除非索引已更改或这些索引的相对基数已更改,否则查询优化器将始终计划和执行相同的操作。

于 2012-10-31T11:25:06.400 回答
0

它将返回它找到的前两条记录,其 id 在您指定的时间间隔内。但是,如果您不指定ORDER BY子句,则无法保证将按特定顺序获取项目。

于 2012-10-31T11:27:27.487 回答
0

它返回在 中找到的前两条记录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
于 2012-10-31T11:29:34.113 回答