oralce查询速度为什么会变快?

CPingerN 2011-07-04 04:32:39
各位大侠,我的标题有点奇怪,请看后文。
在库履历data大约有250万记录,保存每天材料的入库数据,出库数据。在库数据也是每日保存的,但是不一定与入出库同步,比如,7/4的进行了入出库操作,但在库只做到7/2。
有一个view用来查询最近一次结算日的在库数据。
现在从view抽出符合条件的记录登陆到另一个表。

一开始执行要花5分钟左右,很慢很慢。
过一段时,突然就变快了,20秒左右。
这段时间内,在库履历data没有新增记录,只做了一些查询,
另外还加了一个索引,但是又删除。


求高人解释原因,为什么会变快,怎么让这种变快一开始就有效啊?
...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
CPingerN 2011-07-05
  • 打赏
  • 举报
回复
缓冲区的原因,20s→5s这个明白。

从5分变到20s的原因呢?
ALTER SYSTEM FLUSH SHARED_POOL;
ALTER SYSTEM FLUSH BUFFER_CACHE;
执行后就从5分变到20s。
秋雨飘落 2011-07-05
  • 打赏
  • 举报
回复
一是若被选择行所在的数据块已经被读取到数据缓冲区的话,则服务器进程会直接把这个数据传递给客户端,而不是从数据库文件中去查询数据。---耗费5S


若数据不在缓冲区中,则服务器进程将从数据库文件中查询相关数据,并把这些数据放入到数据缓冲区中。
---耗费20s

CPingerN 2011-07-05
  • 打赏
  • 举报
回复
ALTER SYSTEM FLUSH SHARED_POOL;
ALTER SYSTEM FLUSH BUFFER_CACHE;
执行后就变快了,求高人解释!
CPingerN 2011-07-04
  • 打赏
  • 举报
回复
特别想知道从5分钟变成20秒是什么原因?
CPingerN 2011-07-04
  • 打赏
  • 举报
回复
执行数次之后才能变快。
之前:5分钟

之后
第一次:20秒
第二次:5秒
......
ALTER SYSTEM FLUSH BUFFER_CACHE
清除缓存
第N次:20秒
第N+1次:5秒
hanzs 2011-07-04
  • 打赏
  • 举报
回复
看下oracle的select查询原理就知道了
CPingerN 2011-07-04
  • 打赏
  • 举报
回复
问题不是从第二次开始变快的,是N次以后变快的
CPingerN 2011-07-04
  • 打赏
  • 举报
回复
补充一点:
原始数据EXPDAT.DMP约2G左右,
imp之后,给在库履历data加了一个索引,建立了上述view。
就是测试数据。

接下来的操作如帖子所描述的那样。
dut703 2011-07-04
  • 打赏
  • 举报
回复
第一次查询的时候,首先检查database buffers中有没有符合条件的记录,如果没有的话从磁盘读取。
你第二次查询的时候,是直接从database buffer中读取的,自然速度快了

3,492

社区成员

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

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