对多列主键使用IN

时间:2019-02-12 14:27:29

标签: mysql performance

我在MySql中有两列主键(id,id2)。 这些ID具有直接连接(对于ID = 1 ID2 = 11,对于ID = 2 ID = 22等)

我想知道是否有以下查询:

select * from my_table where id IN (1,2,3..) AND id2 IN (11,22,33..)

尽管它是主键,但实际上会损害性能。

将在循环中运行单个选择:

select * from my_table where id = 1 AND id2 = 11
select * from my_table where id = 2 AND id2 = 22

... 运行更快?

我相信答案是肯定的,因为每个id的查询都会将id2与整数列表进行比较。 这是对的吗? 另外,IN对于单列主键是否有所不同?

1 个答案:

答案 0 :(得分:0)

  • 如果您要检查“大多数”值,那么执行表扫描的单个查询可能最快。
  • 如果IN子句很短,则优化程序 可以非常高效地遍历表。
  • 如果表很大,并且值分散并且需要磁盘命中,那么无论如何它都可能很慢。
  • 粗略地讲,10个1行SELECTs本质上需要一个SELECT来获取100行。 (这假定没有I / O和良好的索引。)因此,您需要拼命进行单选。

换句话说,您的数据和您的 IN列表对其进行测试。我们无法给您简单的答案。但是请注意,随着表的增长和/或您的IN列表的更改,性能可能会发生变化。