读书笔记-《基于Oracle的SQL优化》-第一章-1

简介: 开始学习崔老师的《基于Oracle的SQL优化》,七百多页,虽然可能会比较痛苦,但想必是一个痛并快乐的过程,尽情享受了。。。第一章:Oracle里的优化器优化器是Oracle数据库中内置的一个核心子系统,可以理解为一个核心模块或者一个核心功能组件。

开始学习崔老师的《基于Oracle的SQL优化》,七百多页,虽然可能会比较痛苦,但想必是一个痛并快乐的过程,尽情享受了。。。


第一章:Oracle里的优化器
优化器是Oracle数据库中内置的一个核心子系统,可以理解为一个核心模块或者一个核心功能组件。优化器的目的是按照一定的判断原则来得到它认为的目标SQL在当前情形下最搞笑的执行路径,也就是说,优化器的目的是为了得到目标SQL的执行计划。

RBO内置的等级1所对应的的执行路径就是"single row by rowid(通过rowid来访问单行数据)"。等级15所对应的的执行路径则是"full table scan(全表扫描)"。

等价改写目标SQL,以让RBO生效。
目标where条件中对NUMBER或DATE类型的列加上0(如果是VARCHAR2或CHAR类型,可以加上一个空字符,例如||''),这样原先可以用索引的就不能用了。对于多表连接的,这种改变可以影响表连接的顺序,进而使用RBO情况下对目标SQL执行计划作调整。

若两条或两条以上的等级值相同的执行路径。RBO会依据目标SQL中所涉及的相关对象在数据字典缓存中的缓存顺序和目标SQL中所涉及的各个对象在目标SQL文本中出现的先后顺序来综合的判断。这就意味着可以通过调整相关对象在数据字典缓存中的缓存中的顺序,改变目标SQL中所涉及的各个对象在该SQL文本中出现的先后顺序来调整其执行计划。

RBO的缺点:
靠硬编码在Oracle数据库代码库中的一些列固定的规则来决定目标SQL的执行计划,并未考虑SQL中所涉及的对象的实际数据量、实际数据分布等情况,一旦固定的规则不适用于该SQL中所涉及的实际对象时,RBO根据固定规则产生的执行计划就很可能不是当前情况下的最优执行计划了。

CBO:
Oracle自动计算执行路径的成本,直到目标SQL的各个可能的执行路径全部计算完毕或已达到预先定义好的待计算的执行路径数量的阈值。

集的势:
Cardinality,指指定集合所包含的记录数。即指定结果集的行数。表示对目标SQL的某个具体执行步骤的执行结果所包含的记录数的估算。当然,如果是针对整个目标SQL,那么此时的Cardinality就表示对该SQL最终执行结果所包含的记录数的估算。某个执行步骤的对应Cardinality值越大,那么所对应的成本值往往也就越大,这个执行步骤所在执行路径的总成本值也就会越大。

可选择率:
Selectivity,指施加指定谓词条件后返回结果集的记录数占未施加任何谓词条件的原始结果集的记录数的比率。
可选择率的值越大,就意味着返回结果集的Cardinality的值就越大,所以估算出来的成本值也就会越大。


存在的问题

在做实验的过程中碰到一个看似比较小的问题,select  * from emp where mgr=7902;,在mgr建立了索引,但未利用索引,而是使用的全表扫描,奇怪的事情,准备打印10046的trace探探究竟,后面有结果会详细说明,也顺便学习下10046的使用。

目录
相关文章
|
1月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
183 6
|
2月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
284 8
|
5月前
|
存储 Oracle 关系型数据库
Oracle存储过程插入临时表优化与慢查询解决方法
优化是一个循序渐进的过程,就像雕刻一座雕像,需要不断地打磨和细化。所以,耐心一点,一步步试验这些方法,最终你将看到那个让你的临时表插入操作如同行云流水、快如闪电的美丽时刻。
290 14
|
6月前
|
SQL 存储 自然语言处理
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
|
8月前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
7月前
|
SQL Oracle 关系型数据库
解决大小写、保留字与特殊字符问题!Oracle双引号在SQL中的特殊应用
在Oracle数据库开发中,双引号的使用是一个重要但易被忽视的细节。本文全面解析了双引号在SQL中的特殊应用场景,包括解决标识符与保留字冲突、强制保留大小写、支持特殊字符和数字开头标识符等。同时提供了最佳实践建议,帮助开发者规避常见错误,提高代码可维护性和效率。
283 6
|
8月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
8月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
|
9月前
|
SQL 关系型数据库 MySQL
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
430 9
|
8月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。

热门文章

最新文章

推荐镜像

更多