一条Sql语句索引失效的问题

MySql 5.7.15,Sql语句如下:

select equipcode from table1 where logicport in (select tp_id_a from table2 union select tp_id_z from table2)

在table1中logicport是主键,发现这句话执行得非常慢,需要5s左右。Explain之后发现主键的索引失效。 在网上搜了一下,在使用 in 的时候如果里面的数据很多,MySql就可能放弃使用索引。 而且在网上搜索过后发现,在这种情况下可能使用 join 更好

如下:

select equipcode from table1 t1 join table2 t2 on (t1.logicport = t2.tp_id_a) or (t1.logicport = t2.tp_id_z)

所以在使用in的时候应该注意一下。

Written on July 20, 2017