2列具有可交换值:in()vs和

时间:2014-03-20 13:28:23

标签: mysql query-optimization

我有一个表,其中2列代表用户ID。 ID的顺序可以是任何一种方式(取决于谁启动了该过程) 我需要为2个用户(无论哪种方式)的组合检索行。

要测试我在(user1,user2)上添加了一个键,在(user2,user1)上添加了一个键,但最终都没有使用。

我的问题是,你们认为最快/最低的开销是多少?

“传统”方式:

SELECT * FROM table WHERE (user1 = 1 AND user2 = 2) OR (user1 = 2 AND user2 = 1)  

或者使用in():

SELECT * FROM table WHERE user1 IN (1, 2) AND user2 IN (1, 2)

我在这里假设没有记录存在user1 = user2,所以除非我遗漏了某些内容,否则两者都应该产生正确的记录。

修改:fiddle

1 个答案:

答案 0 :(得分:0)

您的架构和查询都很好,MySQL只选择在只有几行时不使用索引。

Updated fiddle with a few more rows