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

简介: CBO优化器的基本概念:可传递性:1、简单谓词传递t1.c1=t2.c1 and t1.c1=10,Oracle会自动将t2.c1=10的条件添加。
CBO优化器的基本概念:
可传递性:
1、简单谓词传递
t1.c1=t2.c1 and t1.c1=10,Oracle会自动将t2.c1=10的条件添加。

2、连接谓词传递
t1.c1=t2.c1 and t2.c1=t3.c1, Oracle会自动将t1.c1=t3.c1的条件添加。

3、外连接谓词传递
t1.c1=t2.c1(+) and t1.c1=10, Oracle会自动将t2.c1(+)=10的条件添加。


CBO的局限性:
1、CBO会默认目标SQL语句where条件中出现的各个列之间是独立的,没有关联关系。

2、CBO会假设所有的目标SQL都是单独执行的,并且互不干扰。
不考虑SQL执行已经缓存到Buffer Cache,下次执行不需要访问物理IO到磁盘读索引叶子块、数据块等,高估用索引的成本。

3、CBO对直方图统计信息有诸多限制。
      Oracle 12c之前,Frequency类型的直方图对应的Bucket数量不能超过254,如果目标列的distinct值的数量超过254,Oracle就会使用Height Balanced类型的直方图。对于Height Balanced类型的直方图,因为Oracle不会记录所有的nopopular value的值,所以CBO选错执行计划的概率会比Frequency类型的情形高。
      如果针对文本类型的字段收集直方图统计信息,则Oracle只会将该文本类型字段的文本值头32个字节取出来(实际只取头15个字节),并将其转换成一个浮点数,然后将这个浮点数作为上述文本型字段的直方图统计信息存储于数据字典中。对于那些超过32个字节的文本型字段,只要对应记录的文本值的头32个字节相同,Oracle收集直方图统计信息时,就会认为这些记录文本值相同,但实际是不同的。进而选择错误的执行计划。

4、CBO在解析多表关联的目标SQL时,可能会漏选正确的执行计划。
SQL各表之间可能的连接顺序总数是n!,10个表连接三百多万,15个表连接一百多亿。
CBO至多只会考虑其中根据_OPTIMIZER_MAX_PERMUTATIONS计算出来的有限种可能。
只要目标SQL正确的执行计划不在上述有限可能之中,则CBO一定会漏选正确的执行计划。
SELECT i.ksppinm name, CV.ksppstvl VALUE, CV.ksppstdf isdefault, 
DECODE (BITAND (CV.ksppstvf, 7), 1, 'MODIFIED', 4, 'SYSTEM_MOD', 'FALSE') ismodified,
DECODE (BITAND (CV.ksppstvf, 2), 2, 'TRUE', 'FALSE') isadjusted FROM sys.x$ksppi i, sys.x$ksppcv CV
WHERE i.inst_id = USERENV ('Instance') AND CV.inst_id = USERENV ('Instance') AND i.indx = CV.indx
AND i.ksppinm LIKE '%_optimizer_max_%'
AND i.ksppinm LIKE '/_%' ESCAPE '/'  ORDER BY   REPLACE (i.ksppinm, '_', '');

NAME
---------------                                                           
_optimizer_max_permutations                 
                                                
DESCRIPTION
---------------
optimizer maximum join permutations per query block

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

推荐镜像

更多