http://aguppi.blogspot.com/2011/06/oracle-access-path.html
Чтобы принудительно использовать Full Table Scans используются хинты.
/*+ FULL(tab_name) */
SELECT /*+ FULL(e) */ employee_id, last_name
FROM employees e
WHERE last_name LIKE :b1;
- Читает все строки таблицы ниже HWM .
- Оптимален для получения большого количества данных из таблицы.
- Блоки читаются последовательно, поэтому можно настроить I/O, чтобы за раз считывалось несколько блоков. Настраиваем параметр инициализации
DB_FILE_MULTIBLOCK_READ_COUNT.
- Каждый блок читается только один раз.
- Если есть условия, то запрос отбрасывает строки не попадающие под условия.
- Отсутствие индекса, когда нет подходящего для запроса индекса.
- Большое кол-во данных, когда оптимизатор предполагает, что запрос вернёт большинство строк таблицы.
- Маленькая таблица, если дешевле прочитать всю таблицу, чем использовать индекс.
- High Degree of Parallelism. A high degree of parallelism for a table skews the optimizer toward full table scans over range scans. Examine the DEGREE column in ALL_TABLES for the table to determine the degree of parallelism.
Чтобы принудительно использовать Full Table Scans используются хинты.
/*+ FULL(tab_name) */
SELECT /*+ FULL(e) */ employee_id, last_name
FROM employees e
WHERE last_name LIKE :b1;