Вы можете помочь Oracle, определив индекс для table_a
в столбце id
до , не просматривая все записи, чтобы найти min .
Если индекс определенOracle выполняет доступ с одним индексом для получения минимальной строки.
Без индекса вам придется выполнить одну FULL TABLE SCAN
большой таблицы.
Лучший способ проверить этособлюдать план выполнения:
create index idx_a on table_a(id);
EXPLAIN PLAN SET STATEMENT_ID = 'q1' into plan_table FOR
With a as (select id from table_a)
select * from table_b
where table_b.id > (select min(id) from a);
SELECT * FROM table(DBMS_XPLAN.DISPLAY('plan_table', 'q1','ALL'));
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 5524 | 71812 | 49 (3)| 00:00:01 |
|* 1 | TABLE ACCESS FULL | TABLE_B | 5524 | 71812 | 47 (3)| 00:00:01 |
| 2 | SORT AGGREGATE | | 1 | 13 | | |
| 3 | INDEX FULL SCAN (MIN/MAX)| IDX_A | 1 | 13 | 2 (0)| 00:00:01 |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("TABLE_B"."ID"> (SELECT MIN("ID") FROM "TABLE_A" "TABLE_A"))