问一个 oracle 的 问题

为什么sql语句第一次执行的时候速度会慢很多,而以后再执行则速度可以有很大改善了。... 为什么sql语句 第一次执行的时候速度会慢很多 ,而以后再执行则速度可以有很大改善 了 。 展开
 我来答
小黑410
2010-11-24 · TA获得超过125个赞
知道答主
回答量:31
采纳率:0%
帮助的人:26.9万
展开全部
sql语句 第一次执行之前会有个硬解析的过程。
1. 加载到共享池中 - SQL源代码被加载到内存中。
2. 语法解析 - Oracle检查语法拼写错误。
3. 语义解析 - Oracle验证来自数据字典的所有表名和列名并且验证你是否有权访问这些数据。
4. 查询转换 - 如果允许(query_rewrite=true),oracle将把复杂的SQL转换为等价的简单形式。
5. 优化 - 根据模式的统计信息创建执行计划(在10g中或许会使用动态的样本统计信息)。
6. 创建可执行文件 - Oracle创建一个服务于SQL查询的、调用本地文件的可执行文件。
Oracle提供了 shared_pool_size参数来缓存SQL从而使我们不需要重复解析SQL(也就是第二次执行同一条sql的时候)。但是,如果shared_pool_size设置太小或者在代码中使用了非重用的SQL(例如包含直接量where name="fred"),SQL语句可能会过期。
在Oracle中软解析和硬解析的区别是什么?仅仅是上面用红色标明的第一步。也就是说,软解析不需要重新装载到共享池(以及相关的内存分配)。
通常很高的解析调用次数(>10/秒)表明你的系统有大量不同的SQL语句,或者你的SQL语句没有被重用(例如,没有使用绑定变量)。
硬解析需要把 SQL语句加载到共享池中。硬解析比软解析差很多,因为它牵涉到共享池中内存的分配和管理。一旦被加载,SQL必须完全重新检查语法和语义以及生成可执行目标。
如果shared_pool_size设置的太小或者SQL语句没有重用,则会发生大量的硬解析。
所以要适当的设置共享池大小并且通过主机变量重用SQL。
阳光上的桥
2010-11-24 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21424 获赞数:65786
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部
这是服务器的缓存技术,重复执行的SQL能快速得到结果。

要让第一次执行都很快的话,注意WHERE和ORDER BY后面的字段都有索引。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友efae51f
2010-11-24 · TA获得超过2221个赞
知道大有可为答主
回答量:6916
采纳率:0%
帮助的人:2967万
展开全部
因为第一次要解析编译你的句语,以后他记住了就快了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4277344
2010-11-24
知道答主
回答量:19
采纳率:0%
帮助的人:5.5万
展开全部
执行语句是 有执行计划的,
好比你做一个表关联查询。
先关联数据少的是不是比关联数据多的 查询速度要快啊。。第一次其实就大概做这些操作。第二次 就不需要了。所以要快。。。。其实就是oracle服务刚起来的第一次
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
letmebe001_98a1c69
2010-11-24 · 超过13用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:14.7万
展开全部
主要是两个原因:
1、sga中的library cache,用于记录sql解析信息。第一次执行的时候要解析sql,第二次执行的时候不用解析了。
2、data buffer cache,用于缓存数据块。第一次取数要到硬盘上去取,第二次能在内存中找到,这个节省了很多时间。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式