文章分类 -  SQL TUNING

摘要:Table Cluster Access Paths 表的聚簇是将一组表的相同列的数据存储在同一个数据块中的操作,聚簇表就是以这种方式存储的表的组合。 当表被聚簇的时候,单个数据块可以存储来自不同表的数据。 一,Cluster Scans 一个聚簇索引是一个聚簇表用来定位数据的索引。 它是以B树索引 阅读全文
posted @ 2019-10-20 00:25 Ryan_Wo 阅读(245) 评论(0) 推荐(0)
摘要:一,位图索引访问路径 对于一个普通的B树索引,一个索引条目指向单一行。 在位图索引里面,键值是索引的数据和rowid范围的结合。 数据库会为每一个索引键存储最少一个位图。位图里面的值是一系列0和1组成的值,指向一个rowid范围内的某一行。 索引,在一个位图索引里面,一个索引条目指向的是一个行集而不 阅读全文
posted @ 2019-10-19 23:28 Ryan_Wo 阅读(204) 评论(0) 推荐(0)
摘要:一,Index Unique Scans 索引唯一扫描最多只会返回一行数据。 优化器什么时候会考虑使用索引唯一扫描? 索引唯一扫描要求是等式查询。数据库只有在满足以下两个条件的时候才会使用索引唯一扫描: 查询谓词包含了唯一索引的所有列,使用等式条件,比如WHERE prod_id=10 SQL语句包 阅读全文
posted @ 2019-10-06 23:56 Ryan_Wo 阅读(263) 评论(0) 推荐(0)
摘要:一,Direct Path Reads 直接路径读,这种情况下,数据库会绕过SGA,从磁盘把缓存读进PGA。 下面的图显示了scattered和sequential读的不同之处,包括从SGA读缓存以及直接路径读。 可以看到: scattered read是多块读入SGA sequential rea 阅读全文
posted @ 2019-10-06 17:59 Ryan_Wo 阅读(920) 评论(0) 推荐(0)
摘要:简介 访问路径是指查询过程获取数据的方式,比如说全表扫描,亦或是索引范围扫描。 访问路径介绍 访问路径每一次只对应一个数据集,这个跟连接过程需要两个数据集是不一样的。 对于不同的关系型数据结构,数据库会采用不同的访问路径: 一般来说,当要获取一个数据集里面的一小部分的时候,使用索引的访问路径的效率要 阅读全文
posted @ 2019-10-05 20:30 Ryan_Wo 阅读(830) 评论(0) 推荐(0)
摘要:说在最前头,一切快慢都是相对来说的 一,堆组织表(heap-organized table) 默认情况下,我们用Create table创建出来的表就是堆组织表,在往这种表里面插入/导入数据的时候不会按某种特殊排列方式的。 表中的每一行都有一个独一的ROWID,当行移动的时候ROWID也会跟着变化, 阅读全文
posted @ 2019-10-03 21:20 Ryan_Wo 阅读(1299) 评论(0) 推荐(0)
摘要:总概 SQL调优是指对未达到预期的SQL语句进行诊断和修复 关于SQL调优 SQL调优是一个反复的过程,是一步一步的将SQL语句的性能提升到预期的目标。 它是对一个已经实施完成了的应用的问题的解决,相反的,应用设计则是在实施之前,就应该已经设定好了安全和性能的目标。 SQL调优的目的 一次典型的调优 阅读全文
posted @ 2019-09-25 22:31 Ryan_Wo 阅读(3862) 评论(0) 推荐(0)
摘要:1,IN-MEMORY AGGREGATION 内存聚合 这个要涉及到vector transformation的概念,内存聚合用来优化多个小表和一个大表之间的连接结果的聚合过程的CPU使用,多为数据仓库,连接的表,连接的列,group by的列很多的情况。 详细的解释可以看下这个链接: http: 阅读全文
posted @ 2019-09-22 18:03 Ryan_Wo 阅读(213) 评论(0) 推荐(0)
摘要:排序合并连接 排序合并连接是嵌套循环连接的变种。 如果两个数据集还没有排序,那么数据库会先对它们进行排序,这就是所谓的sort join操作。 对于数据集里的每一行,数据库会从上一次匹配到数据的位置开始探查第二个数据集,这一步就是Merge join操作。 优化器什么时候会考虑使用排序合并连接? 哈 阅读全文
posted @ 2019-09-18 15:32 Ryan_Wo 阅读(5922) 评论(0) 推荐(0)
摘要:哈希连接 数据库一般使用hash join来连接更大的数据集。 优化器会使用两个数据集中比较小的那个,在连接列上创建一个摆放在内存里的hash表,然后使用唯一性的hash函数来指定每一行在hash表里的存放位置。 然后数据库会扫描大的那个数据集,探测hash表,找到匹配的行。 优化器什么时候会考虑使 阅读全文
posted @ 2019-09-17 00:11 Ryan_Wo 阅读(5957) 评论(0) 推荐(1)
摘要:嵌套循环连接 嵌套循环连接一个外部数据集到内部数据集中,针对外部数据集的每一行数据,数据库会去匹配内部数据集中所有匹配谓词条件的行。如果这个时候内部数据集或者内部表有索引可用,那么数据库就会通过使用它来定位rowid来获取数据。 优化器什么时候考虑使用嵌套循环连接? 一般来说,嵌套循环连接在小表之间 阅读全文
posted @ 2019-09-15 23:02 Ryan_Wo 阅读(7891) 评论(0) 推荐(2)
摘要:什么是连接? 连接是指在SQL的where或者from后面跟着多个行源(表,视图,或者数据集等)的时候,数据库对这些行源进行联合的操作。连接的条件则是数据库要来判断不同数据集之间关系的依据,如果没有提供正确的关联关系,那么数据库就会对数据集做笛卡尔连接,把内表(N行)和外表(M行)的每一行数据进行匹 阅读全文
posted @ 2019-09-15 23:02 Ryan_Wo 阅读(824) 评论(0) 推荐(1)
摘要:这里不讲每一步在做什么,那样子会让你很混乱。 刚开始阅读执行计划,只要遵循以下三个原则,一步一步读就可以了。 比如以下的执行顺序是4, 5, 3, 6, 2, 9, 10, 8, 7, 1, 0,嵌套循环连接外部表是DEPARTMENTS, 哈希连接的哈希表是EMP_NAME_IX过滤出来的结果集 阅读全文
posted @ 2019-09-14 11:59 Ryan_Wo 阅读(523) 评论(0) 推荐(1)
摘要:1, EXPLAIN PLAN example: 特点: explain plan不支持date绑定变量的数据类型隐式转换 当有绑定变量的时候,explain plan 不一定代表真实的执行计划 explain plan的结果都只是估算,并不是真正执行的结果 2,SQL_TRACE example: 阅读全文
posted @ 2019-09-14 11:15 Ryan_Wo 阅读(551) 评论(0) 推荐(0)