使用带LIM的IN时输出是否随机?

时间:2012-10-31 11:23:12

标签: mysql

如果我有一个像mysql这样的查询:

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

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

3 个答案:

答案 0 :(得分:1)

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

然而,对于这个确切的查询,除非你得到一些奇怪的存储引擎随机化以获得乐趣(不是我知道的任何常见的myslq引擎),它将始终是结果集中的前两个记录。除非您更改表结构或记录,否则结果集应始终相同。除非索引已更改或这些索引的相对卡片性已更改,否则查询优化器将始终计划并执行相同的操作。

答案 1 :(得分:0)

它将返回它找到的前两个记录,并在您指定的时间间隔内使用id。 但是,如果您未指定ORDER BY子句,则无法保证以特定顺序提取项目。

答案 2 :(得分: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