2

我只是想知道 IN 在 My SQL 查询中是如何工作的?

假设我有代码

select * from myTable WHERE id IN (5,9,2,4,6,3);

这是否相当于

select * from myTable WHERE id = 5;
select * from myTable WHERE id = 9;
select * from myTable WHERE id = 2;
select * from myTable WHERE id = 4;
select * from myTable WHERE id = 6;
select * from myTable WHERE id = 3;

或者

顺序是随机的?


编辑 1

这里 ORDER 并不意味着ORDER BY. 我的意思是先 5,然后是 9,然后是 2,依此类推

或者

随机顺序意味着先 4,然后 3,然后 2,依此类推....

请告诉我。

4

3 回答 3

2

在 MySQL 中,IN子句是使用Binary Search执行的。参考

这意味着搜索针对性能进行了优化,并且不会按顺序遍历列表。

于 2012-11-19T17:20:58.543 回答
0

顺序是随机的(好吧,在技术上不是随机的,但你不能可靠地预测它)。您发布的查询相当于:

SELECT * FROM myTable WHERE id = 5 OR id = 9 OR id = 2 OR id = 4 OR id = 6 OR id = 3

如果你想要一个特定的顺序,你将需要使用一个ORDER BY子句。IN无论您对规范中的值使用什么顺序。

于 2012-11-19T17:16:34.537 回答
0

不,你需要更具体。当您在单独的查询中查询 id 时,答案是否定的。如果需要订单,您需要添加 orderby 子句。此外,等于运算符始终是随机的,因此当您混合 IN 运算符和等于 where 子句中的顺序时,这一点很重要。

于 2012-11-19T17:20:12.057 回答