社区
基础和管理
帖子详情
弱弱的问下数据库中什么是基于成本的优化(急!)
Freezind
2008-12-09 11:10:48
数据库中什么是基于成本的优化
我在网上搜到的都是什么Oracle的基于成本的优化器,但我还是不知道什么是基于成本的优化。请高手指点。
最近要写一篇论文,我想写关于关于成本优化方面的,如果大家有好的文章,希望共享下。先谢谢了。
...全文
58
2
打赏
收藏
弱弱的问下数据库中什么是基于成本的优化(急!)
数据库中什么是基于成本的优化 我在网上搜到的都是什么Oracle的基于成本的优化器,但我还是不知道什么是基于成本的优化。请高手指点。 最近要写一篇论文,我想写关于关于成本优化方面的,如果大家有好的文章,希望共享下。先谢谢了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Andy__Huang
2008-12-09
打赏
举报
回复
Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是由优化器(Optimizer)来完成的。不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的。相信你一定会用Pl/sql Developer、Toad等工具去看一个语句的执行计划,不过你可能对Rule、Choose、First rows、All rows这几项有疑问,因为我当初也是这样的,那时我也疑惑为什么选了以上的不同的项,执行计划就变了?
1、优化器的优化方式
Oracle的优化器共有两种的优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO)。
A、RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。
B、CBO方式:依词义可知,它是看语句的代价(Cost)了,这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小 、有少行、每行的长度等信息。这些统计信息起初在库内是没有的,是你在做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些我们应及时更新这些信息。在Oracle8及以后的版本,Oracle列推荐用CBO的方式。
我们要明了,不一定走索引就是优的 ,比如一个表只有两行数据,一次IO就可以完成全表的检索,而此时走索引时则需要两次IO,这时对这个表做全表扫描(full table scan)是最好的。
2、优化器的优化模式(Optermizer Mode)
优化模式包括Rule,Choose,First rows,All rows这四种方式,也就是我们以上所提及的。如下我解释一下:
Rule:不用多说,即走基于规则的方式。
Choolse:这是我们应观注的,默认的情况下Oracle用的便是这种方式。指的是当一个表或或索引有统计信息,则走CBO的方式,如果表或索引没统计信息,表又不是特别的小,而且相应的列有索引时,那么就走索引,走RBO的方式。
First Rows:它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。
All Rows:也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走基于规则的方式。
3、如何设定选用哪种优化模式
◆A、Instance级别
我们可以通过在init.ora文件中设定OPTIMIZER_MODE=RULE、OPTIMIZER_MODE=CHOOSE、OPTIMIZER_MODE=FIRST_ROWS、OPTIMIZER_MODE=ALL_ROWS去选用3所提的四种方式,如果你没设定OPTIMIZER_MODE参数则默认用的是Choose这种方式。
◆B、Sessions级别
通过SQL> ALTER SESSION SET OPTIMIZER_MODE=;来设定。
◆C、语句级别
这些需要用到Hint,比如:
dawugui
2008-12-09
打赏
举报
回复
是说的查询成本吧?就是指如何查询时间最少.
十问
数据库
:问来路,问现在,问未来
【CSDN 编者按】
数据库
技术的蓬勃发展,不仅带动了产业的百家争鸣之势,更使
中
国
数据库
在国际
数据库
格局
中
占据了一席之地。与此同时,引发了业界诸多讨论与疑问,比如,面对国际顶流
数据库
的垄断态势,国产
数据库
...
首款国产开源
数据库
TBase核心架构演进
腾讯云
数据库
国产
数据库
专题线上技术沙龙正在火热进行
中
,4月14日李跃森的分享已经结束,没来得及参与的小伙伴不用担心,以下就是直播的视频和文字回顾。 关注“腾讯云
数据库
”公众号,回复“0414李跃森”,即可...
常见
数据库
分类
SQL(StructuredQueryLanguage,结构化查询语言)是一种
数据库
查询语言和程序设计语言,主要用于管理
数据库
中
的数据,如存取数据、查询数据、更新数据等。 SQL是IBM公司于1975—1979年之间开发出来的,在20世纪随着...
数据库
大数据量、高并发、高可用解决方案!
对于一些互联网项目来说,企业为节省
成本
,一般会考虑将所有的数据都存储在一个
数据库
中
,这个时候我们只需要考虑
数据库
优化
、SQL
优化
、数据缓存、限流,消息队列、服务器性能等问题。 阿里巴巴《Java 开发手册》...
时序
数据库
传统
数据库
在对这些数据进行存储、查询、分析等处理操作时捉襟见肘,迫切需要一种专门针对时序数据来做
优化
的
数据库
系统,即时间序列
数据库
。 什么是时序数据 从定义上来将,时间序列数据Time Series Data (TSD),...
基础和管理
17,377
社区成员
95,128
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章