免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4543 | 回复: 3
打印 上一主题 下一主题

oracle 存储过程中使用全局临时表 的性能问题 牛人进 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-17 17:53 |只看该作者 |倒序浏览
在写一个OLTP 的sp    其中需要用到大量数据的关联查询比对,而且对并发要求比较高 ,说明如下:

      表a :全局临时表  存放本次参与比对的所有数据   

    sp中需要表a与多个数据表进行关联比对,比如表b  表c   表d  ,且 b c d 表的关联字段都是主键  ,b c d 表的数据比较大 可能有千万级   

     虽然并发要求较高,但每个用户使用的数据都不同,就是说用户1  不会使用到用户2 的数据  

请问:是把 b c d   都创建全局临时表 然后把需要的数据插入临时表再比对快  还是 直接用物理表直接关联查询快些阿??

论坛徽章:
0
2 [报告]
发表于 2010-07-17 22:36 |只看该作者
没有人 来吗? 自己顶个 别沉了

  前提:a已经是全局临时表了,只讨论b c d 是临时表 或者 物理表的性能差距   
      
      如果不是使用临时表: 在第一次比较后 b c d 的相关数据也被装入了内存,而且所有关联b表的语句是集中处理的,也就说所有与b的关联语句在一个块中,比如要和b进行10次比较,则10条语句按照 1 ---> 10  的顺序执行的。 这样从第二句开始 b的数据也是在内存的缓存中(个人理解,如果不正确请指正).....

      如果使用临时表:如果把 b c d 的数据 事先与a 关联后装入全局临时表(即 临时表中的数据都是需要参与比对的), 这样会比前一种情况快吗?? 还有这样的 b c d 全局临时表有必要建索引吗? 综合起来看会比不建索引快吗?

   特别说明:该存储过程的执行时间可能比较长 的用户较多时可能要1分钟多

论坛徽章:
0
3 [报告]
发表于 2010-07-18 11:43 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
4 [报告]
发表于 2010-07-18 15:23 |只看该作者
bcd使用临时表并不一定能带来性能的提升,你先要从磁盘读取来,然后还要插入到临时表,这其中就多了不少IO。性能何来提升啊?


临时表是可以创建索引的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP