php - union和in相比哪个效率更高?
大家讲道理
大家讲道理 2017-04-10 17:18:21
[PHP讨论组]

我有一个文章表,查询多条文章记录
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条不等)

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(5)
天蓬老师

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

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

大家讲道理

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

黄舟

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

天蓬老师

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

巴扎黑

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号