在sql查询中如果where条件in中的参数超过一千条甚至更多一般有什么优化方案?如 in(1,2,...........99999)

qq_17818121 2018-11-08 04:06:58
这中查询类似于批量查询,一个参数携带多个值,查询出多条记录出来,有大神可以支教几招面对这种问题的解决方案。
...全文
9843 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
像这种数值类型的条件,可以条件列创建索引,试试用between...and.. 或者用临时表+exists查询
tensung10 2019-03-07
  • 打赏
  • 举报
回复
试试这样,举个例子,范围是0-9999的话,下面的where写法: where regexp_like(column_name, '[0-9][0-9][0-9][0-9]')
大脸猫o 2019-03-06
  • 打赏
  • 举报
回复
用 exists 和 not exists吧
yaiger 2019-03-04
  • 打赏
  • 举报
回复
即便是传入的参数,如果很多,也可以插入临时表来处理
引用 10 楼 Finn_ 的回复:
引用 2 楼 yaiger 的回复:
把参数插入临时表,然后再关联这个临时表查询
如果in参数是传入的不是通过查询其他表得到的,这种情况要怎么优化?
Finn 2019-03-03
  • 打赏
  • 举报
回复
引用 7 楼 qiaoyhgaoyan 的回复:
用WITH A AS 拼起来当一个临时表处理
如果in参数是传入的不是通过查询其他表得到的,这种情况要怎么优化?
Finn 2019-03-03
  • 打赏
  • 举报
回复
引用 8 楼 hejingx 的回复:
[quote=引用 7 楼 qiaoyhgaoyan 的回复:]
用WITH A AS 拼起来当一个临时表处理

正确处理办法,构建临时表
[/quote]如果in参数是传入的不是通过查询其他表得到的,这种情况要怎么优化?
Finn 2019-03-03
  • 打赏
  • 举报
回复
引用 2 楼 yaiger 的回复:
把参数插入临时表,然后再关联这个临时表查询
如果in参数是传入的不是通过查询其他表得到的,这种情况要怎么优化?
Y....T 2019-02-12
  • 打赏
  • 举报
回复
我也建议可以用exists代替,效率绝对比in高出许多
hejingx 2018-12-04
  • 打赏
  • 举报
回复
引用 7 楼 qiaoyhgaoyan 的回复:
用WITH A AS 拼起来当一个临时表处理

正确处理办法,构建临时表
dlgxyq 2018-12-02
  • 打赏
  • 举报
回复
用WITH A AS 拼起来当一个临时表处理
Rotel-刘志东 2018-11-09
  • 打赏
  • 举报
回复
in 后边最多999个,性能下降的。建议可以用exists代替。
卖水果的net 2018-11-08
  • 打赏
  • 举报
回复
不会的,你向表中写这么几个数据,比起 in 的性能下降来说,不算什么。可以做一下测试。
qq_17818121 2018-11-08
  • 打赏
  • 举报
回复
如果建临时表的话对数据库的读写操作比较频繁,而且要求数据库读写性能也得好,否则查询时间会更长。
卖水果的net 2018-11-08
  • 打赏
  • 举报
回复
in 超过 300 个,性能就会严重下降。 按 2# 的建议,先写临时表,再关联查询。
yaiger 2018-11-08
  • 打赏
  • 举报
回复 2
把参数插入临时表,然后再关联这个临时表查询
nayi_224 2018-11-08
  • 打赏
  • 举报
回复
in(1, 2, 3) or in(4, 5, 6)

3,490

社区成员

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

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