通过切换差异的展示格式,我们可以看到各种信息,但是展示效果与使用explain plan for语句是一样的,这种方式可以更加的快捷方便! 上面的例子相对来说展示效果比较单一,接下来举用下面的例子再形貌以下,已知员工表employees和部分表departments,现要求查询出员工薪资为6000的员工信息和部分信息,我们可以用快捷键F5查看下他的实行计划:
①在上途中我们发现TABLE ACCESS FULL 时,通常意味着该查询使用了 Full Table Scan 的方式来访问表。上面有提到了这个方式,但我还是要再絮聒一下:
Full Table Scan 是一种全表扫描的方法,即当我们的查询条件不能使用索引进行查找时,Oracle就会对整个包罗了表数据的数据块进行扫描,从而获取需要的数据。此时, Oracle 就会选择使用 TABLE ACCESS FULL 操作符。
如果查询中使用了 TABLE ACCESS FULL 而没有使用索引,则可能导致查询速度相对较慢,对于较大的表来说,这种方法可能会产生很高的 I/O 成本和 CPU 成本,不利于系统性能。 留意:
在实际应用中,尽可能避免使用 Full Table Scan,可以思量使用符合的索引或优化查询语句等方式提高查询性能。
②在实行计划中,还发现了INDEX UNIQUE SCAN ,它表示对于一个唯一索引或主键索引的范围查找方式。 当查询语句中包罗了对唯一索引或主键索引字段的等值(=)条件时,在实行计划中就会显示 Index Unique Scan 操作。这种方法可以非常快速地定位到需要查询的行,而且不会产生重复数据输出。
与平凡索引扫描差异的是,Index Unique Scan 确保查询效果最多只有一行纪录,因为唯一索引或主键索引本身就定义了数据行的唯一性。因此,如果我们可以通过索引的方式找到精确匹配的数据,则最好使用 INDEX UNIQUE SCAN 以提高查询效率。
总之,Index Unique Scan 是一种高效的查询方式,实用于对于唯一索引或主键索引进行查询的场景。同时,建立符合的索引也是提高查询性能的重要本领之一。
③在实行计划中,还发现了TABLE ACCESS BY INDEX ROWID ,它表示通过索引行 ID 进行表数据访问的操作。一样平常而言,使用该操作符需要颠末以下步骤:
1. 根据查询语句中的条件,找到符合的索引;
2. 使用索引查找所需的数据行的 Rowid;
3. 根据 Step 2 中获取的 Rowid 值,从表中取出对应的数据行。
这个操作符与其他操作符最大的区别在于,它不是针对索引进行数据访问,而是针对实际的数据表进行访问。因此,TABLE ACCESS BY INDEX ROWID 可以通过索引快速定位到需要的数据行,并根据 Rowid 直接访问表数据,从而提高查询的效率。 留意:
在使用 TABLE ACCESS BY INDEX ROWID 时,如果表的数据分散在多个磁盘块中,就可能会产生很高的 I/O 成本和 CPU 成本,导致查询性能降落。因此,在进行优化时,应只管避免物理磁盘 IO 操作的数量,可以通过内存或者调整磁盘布局等方式来改善性能。
④在本文章的第四节【四、实行计划的实行次序】提到了实行次序,那么我们在上图的树布局--泯灭就可以知道他们的实行次序是怎样排序的,如果不清楚,我们九可以点击图中标记的三角提示进行查看。