"ТАБЛИЦА ДОСТУПА ПО ИНДЕКСУ ROWID" означает оптимизатор с использованием индекса или таблицы?

I have query that join two very big tables and ran explain plan on that it showing like this..
 ----------------------------------------------------------------------------------------------------------------
 | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
 ----------------------------------------------------------------------------------------------------------------
 | 0 | SELECT STATEMENT | | 1 | 31 | 7 (0)| 00:00:01 |
 | 1 | PX COORDINATOR | | | | | |
 | 2 | PX SEND QC (RANDOM) | :TQ10000 | | | | |
 | 3 | NESTED LOOPS | | | | | |
 | 4 | NESTED LOOPS | | 1 | 31 | 7 (0)| 00:00:01 |
 | 5 | PX PARTITION HASH ALL | | 1 | 17 | 5 (0)| 00:00:01 |
 | 6 | TABLE ACCESS BY INDEX ROWID| Tab1 | 1 | 17 | 5 (0)| 00:00:01 |
 |* 7 | INDEX RANGE SCAN | Tab1_PK | 1 | | 4 (0)| 00:00:01 |
 |* 8 | INDEX UNIQUE SCAN | tab2_PK | 1 | | 1 (0)| 00:00:01 |
 |* 9 | TABLE ACCESS BY INDEX ROWID | Tab2 | 1 | 14 | 2 (0)| 00:00:01 |
 ----------------------------------------------------------------------------------------------------------------
Query:
select t2.colC,t2,colD,t1.colX
from tab2 t2
join tab1 t1 on t2.colA=t1.colA
and t1.colB=2345
and t2.colC in (123,456,789);

Значит ли TABLE ACCESS BY INDEX ROWID Оптимизатор обращается к rowid в таблице индексов или сканирования, чтобы получить rowids?

В настоящее время Query заканчивается через несколько секунд. Но в плане говорится, что он не использует какой-либо индекс, обе таблицы имеют соответствующие индексы.

2 ответа

TABLE ACCESS BY INDEX ROWID означает, что ядро ​​Oracle проходит через ваш индекс и знает, что в индексе содержится не вся необходимая информация (требуемые столбцы не указаны в этом индексе). Поэтому он принимает указатель на фактические данные таблицы (rowid) и ищет его.

Популярный трюк для ускорения работы в этом случае включает в себя отсутствие столбцов в (не уникальном) индексе. Это позволяет избежать одного поиска в таблице за счет более крупных индексов.


ТАБЛИЦА ДОСТУПА ПО ИНДЕКСУ ROWID - мы должны знать две вещи об этом

  • Строка строки задает файл данных и блок данных, содержащий строку и местоположение строки в этом блоке. Локализация строки путем указания ее rowid - это самый быстрый способ получить одну строку, поскольку она указывает точное местоположение строки в базе данных.

  • Поиск индекса - это быстрая и эффективная работа для Oracle, и когда Oracle найдет нужное значение, которое он ищет, он также может узнать rowid записи в другой таблице. Затем Oracle может использовать этот rowid для получения дополнительной информации, если запрашивается в запросе

licensed under cc by-sa 3.0 with attribution.