search

Home  >  Q&A  >  body text

php - 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条不等)

大家讲道理大家讲道理2902 days ago585

reply all(5)I'll reply

  • 天蓬老师

    天蓬老师2017-04-10 17:20:21

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

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

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-10 17:20:21

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

    reply
    0
  • 黄舟

    黄舟2017-04-10 17:20:21

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

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-10 17:20:21

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

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-10 17:20:21

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

    reply
    0
  • Cancelreply