union和in相比哪个效率更高?

我有一个文章表,查询多条文章记录
id是主键,还有若干像title,content,author之类的字段(post表记录300W+)

select * from post  where id in (id1,id2,id3,id4)  

select * from post where id = id1 union select * from post where id = id2 union select * from post where id = id3 union select * from post where id = id4 

的效率哪一个更高?(id的个数从1-20条不等)

阅读 4.9k
5 个回答

对于你这类的简单判断范围的查询,使用IN的效率要高于UNION。
在有索引的字段上使用,这两者执行的过程几乎一样,所以差不不大。
但是对于没有索引的字段,使用UNION意味着要比使用IN多扫描N次表,也就造成多N倍的时间。(这里的N代表的就是ID的个数)

所以总和来说,这种场景下使用IN更为合适。

这个正常来说都是in高吧.............

可以使用left join 代替 union or in 查询

我觉得你可以explain一下看看执行的语句的情况。
不过之前查阅的一些文档说目前的主流版本的db实现都已经进行了相当好的优化,所以使用In 一般就可以了。
如果效率比较低,可能更多的情况是复合查询的语句才会有的问题。

in查询会快点,就像有明哥说的那样。但我觉得可以文章表垂直分割下,把content字段拿出来单独作为,一张表,很文章表关键起来,这样会比较好。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题