求助Oracle 的 analyze table

GunnerSunmz 2017-09-15 10:34:58
各位CSDN的大牛们,你们好!
本人小白一枚
今天做Oracle存储过程的时候遇到一个很奇怪的问题。
将select出来的数据insert到一张临时表时花费时间特别的长(注:该表在此存储过程中第一次被使用,且一开始就被清空)
然后我将这一段insert和select复制到外面单独执行,能够正确出来数据且花费时间很短(正常)。
后来咨询部门同事,同事建议在插入到这张临时表的时候,先执行以下语句
execute immediate 'analyze table 临时表 compute statistics';
添加之后,果然就能顺利运行了。
然后我问同事,为什么要这么做,他表示也不清楚,只知道以前遇到这个问题就是这么做的。
最后我就被大伙怂恿来到CSDN来向各位大牛请教了。
第一次发帖,请多多指教!

问:出现上述问题的原因是什么?analyze table的本质是什么?
...全文
552 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sz_jack 2017-10-22
  • 打赏
  • 举报
回复
临时表数据是不是 用delete 了,临时表可能数也有索引等,数据删除了,但是统计信息没有边,分析表只是为执行计划增加更新表信息!oracle 执行计划自动根据表统计信息选择最优的方法!或者你们建几个表,如果临时表的数据是全部删除建议用 turncate table xx!
minsic78 2017-09-18
  • 打赏
  • 举报
回复
引用 4 楼 qq646748739 的回复:
analyze table的本质是收集表(数据)的统计信息,下次在对该表进行操作的时候,就会省去一些解析的时间,因此检索速度自然就会快很多。
重要的是可能生成更好的执行计划,生下来的动态采样的时间几乎是可以忽略不计的。。。
碧水幽幽泉 2017-09-18
  • 打赏
  • 举报
回复
analyze table的本质是收集表(数据)的统计信息,下次在对该表进行操作的时候,就会省去一些解析的时间,因此检索速度自然就会快很多。
卖水果的net 2017-09-18
  • 打赏
  • 举报
回复
楼主是什么样的临时表? temporary的吗?
minsic78 2017-09-15
  • 打赏
  • 举报
回复
忘了说了。 analyze的本质就是对表进行各种统计,比如表里有多少数据?表里数据的分布情况如何等等,实际上到了9i之后,oracle建议使用dbms_stats包来完成统计信息的收集工作,analyze命令不大用了,它有一些缺陷,比如不能并行,比如收集分区表的时候存在一些问题等等。
minsic78 2017-09-15
  • 打赏
  • 举报
回复
按理说不应该发生这种情况的,确定analyze的是被insert的表?而不是select查询中的表?或者说,insert表本身也在select查询中出现了?如果不是,那么这种方法就没什么普适性了。 另外你说select和insert各自执行都很快?insert没有select子句跟着,只有跟上values才能是个合法的insert语句,不知道你是怎么insert的?而select查询独自执行很快也很可疑,用的是什么工具?有没有返回所有的结果数据?

3,491

社区成员

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

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