多表并联并且in很多个字段效率问题

baidu_17319793 2018-01-23 04:41:50
有很多结构一样的表(大约100个),其中有一个设备id字段并建有索引。现在需要一次查询大约2000个设备id。怎么查询这100个表里符合条件的数据比较快呢?我现在的查询就是
SELECT * FROM table_name1 where in(设备id1,设备id2,.......,设备id2000)
UNION ALL
SELECT * FROM table_name2 where in(设备id1,设备id2,.......,设备id2000)
.....
UNION ALL
SELECT * FROM table_name100 where in(设备id1,设备id2,.......,设备id2000)

但是这样写的话查询效率太慢。往往需要好几分钟。请问怎么优化一下比较好呢。
每个表大约1,2百万条数据。
用的是PostgreSQL 数据库。但是感觉那个版块人太少,所以只能再这个板块发了。
...全文
1007 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2018-01-24
  • 打赏
  • 举报
回复
引用 3 楼 baidu_17319793 的回复:
[quote=引用 1 楼 zjcxc 的回复:] 试试把要查的值放到一个表中,然后 JOIN 看看效率
放到临时表吗。因为设备id是搜索项,用户有可能会选择1,2个设备id查,有可能会选择1000个查,最多的话是2000个左右。[/quote] 当然放临时表
liu志坚 2018-01-23
  • 打赏
  • 举报
回复
不加索引走全表就更慢了。关键开销是IO
baidu_17319793 2018-01-23
  • 打赏
  • 举报
回复
引用 2 楼 liuzhijian2008x 的回复:
这个估计很难优化了,走了索引了,那100个表*2000记录的IO摆在这呢,需要时间。
那不加索引就会快了吗
baidu_17319793 2018-01-23
  • 打赏
  • 举报
回复
引用 1 楼 zjcxc 的回复:
试试把要查的值放到一个表中,然后 JOIN 看看效率
放到临时表吗。因为设备id是搜索项,用户有可能会选择1,2个设备id查,有可能会选择1000个查,最多的话是2000个左右。
liu志坚 2018-01-23
  • 打赏
  • 举报
回复
这个估计很难优化了,走了索引了,那100个表*2000记录的IO摆在这呢,需要时间。
zjcxc 2018-01-23
  • 打赏
  • 举报
回复
试试把要查的值放到一个表中,然后 JOIN 看看效率

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧