我在一个简单的SELECT语句中使用了Oracle数据库中的EXPLAIN PLAN,以了解它是如何工作的。在EXPLAIN PLAN的一个输出中,提到了table access by index rowid
,而在另一个输出中有table access by index rowid BATCHED
。他们之间有什么区别?
答案 0 :(得分:11)
该文档仅包含有关此主题的一个句子:
https://docs.oracle.com/database/121/TGSQL/tgsql_optop.htm#GUID-4180BA97-3E2C-41F9-B282-4FB3FF9532CB
步骤1中显示的BATCHED访问意味着数据库检索a 索引中的行ID很少,然后尝试访问块中的行 命令改善聚类并减少聚集次数 数据库必须访问一个块。
考虑以下(简化)索引
的例子+-------------+------------------+
| index value | block nbr-rowid |
+-------------+------------------+
| 1 | 015-000123 |
| 2 | 034-000527 |
| 3 | 088-000285 |
| 4 | 015-000889 |
| 5 | 088-000632 |
........
........
在“正常”(非批处理)方法中,Oracle按索引确定的顺序检索行:
在批处理方法中,oracle从索引中检索一些条目,然后首先按块数对它们进行排序,然后按照块数确定的顺序处理条目:
正如您在此示例中所看到的,块仅被提取3次而不是5次,因此从磁盘读取的块数已经减少 - 一些块只读取一次而不是两次(或更多次)。