请教各位高手一个sql优化的问题

cuicuidonghua 2011-06-01 07:59:29
今天刷新报表的时候 看到一位大哥写的存储过程 里面有一张表 3000W条数据 他用了一个字段叫jobcode做筛选条件
select ...... from ........ where jobcode in('...','..','..'....)
如果用in()是要全表扫描的吧? 他的存储过程中多次使用了 jobcode in() 所以感觉速度特别慢

请问下各位高手 有什么方法可以代替这个存储过程中的in么?
...全文
88 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangqm22 2011-06-02
  • 打赏
  • 举报
回复
使用EXISTS替换in吧
dut703 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cuicuidonghua 的回复:]

引用 1 楼 truexf 的回复:
如果有针对jobcode建索引则会用到索引,不过即使这样索引的in的效率也不是太高。若没有的话肯定是全表扫描。

替代方法不好说,要看实际需求是怎样,你这条带很多省略号的sql很难让人说能提供啥替代方法。



还是很谢谢您的回复~ 公司内部的代码如果贴在论坛上不知道是不是违反保密协议的 所以不敢都贴上来
[/Quote]
又不是贴数据,一点代码不至于吧。。。
cuicuidonghua 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 truexf 的回复:]
如果有针对jobcode建索引则会用到索引,不过即使这样索引的in的效率也不是太高。若没有的话肯定是全表扫描。

替代方法不好说,要看实际需求是怎样,你这条带很多省略号的sql很难让人说能提供啥替代方法。
[/Quote]


还是很谢谢您的回复~ 公司内部的代码如果贴在论坛上不知道是不是违反保密协议的 所以不敢都贴上来
cuicuidonghua 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 cuicuidonghua 的回复:]
今天刷新报表的时候 看到一位大哥写的存储过程 里面有一张表 3000W条数据 他用了一个字段叫jobcode做筛选条件
select ...... from ........ where jobcode in('...','..','..'....)
如果用in()是要全表扫描的吧? 他的存储过程中多次使用了 jobcode in() 所以感觉速度特别慢

请问下各位高手 有什么方法可以……
[/Quote]

还是很谢谢您的回复~ 公司内部的代码如果贴在论坛上不知道是不是违反保密协议的 所以不敢都贴上来
「已注销」 2011-06-01
  • 打赏
  • 举报
回复
如果有针对jobcode建索引则会用到索引,不过即使这样索引的in的效率也不是太高。若没有的话肯定是全表扫描。

替代方法不好说,要看实际需求是怎样,你这条带很多省略号的sql很难让人说能提供啥替代方法。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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