Самый быстрый метод доступа к данным. Используется внутренний системный идентификатор записи. Обычно применяется после индексного поиска или при явном указании в SQL-запросе значения ROWID строки данных таблицы.
Соединение — это предикат, объединяет данные из нескольких источников данных (таблиц и представлений). Используется при извлечении данных из нескольких таблиц.
СУБД ORACLE использует три различных вида соединений:
Соединение таблиц с помощью вложенных циклов. Для связанной таблицы данные перебираются построчно в цикле; если таблиц несколько, то применяются вложенные циклы.
Соединение таблиц на основе хэш-массива. Предварительно строится хэш-массив, на основании которого связываются таблицы.
Соединение с помощью Декартова произведения.
В итоге каждая строка из таблицы 1 соединяется со всеми строками таблицы 2, затем то же самое для каждой строки таблицы 2 по отношению к таблице 3, и так далее.
Если есть операции сортировки данных, которые предполагается выполнить:
ORDER BY — GROUP BY — SORT MERGE JOIN
Отражает условия WHERE и HAVING.
Использование в SQL-запросе представления ORACLE.
Показывает использование в SQL-запросе материализованного представления ORACLE.
Объединение нескольких таблиц слиянием.
Объединение нескольких таблиц.
HASH JOIN
Самый быстрый алгоритм соединения данных из нескольких источников, появился начиная с версии ORACLE 7.3, однако не является универсальным, то есть не может быть использован для любых условий соединений.
CARTESIAN
Соединение чаще всего генерирует значительное количество информации и является ошибкой кодирования, когда, например, не указаны никакие условия соединения.
NESTED LOOP
В случае отсутствия индексов стоимость выполнения соединения может оказаться неприемлемо высокой.
INDEX SKIP SCAN
Существует начиная с ORACLE 9. В более ранних версиях ORACLE не использовался.
INDEX FULL SCAN
Возвращает считанные данные в отсортированном виде. Может быть неэффективен в ряде случаев.
Как правило, решение об эффективности использования принимает оптимизатор на основе собранной ранее статистики.
FULL SCAN
Если вы видите в запросе FULL SCAN с высокой стоимостью COST, следует рассмотреть план запроса, и возможно — это показание к необходимости для оптимизации запроса.
Как составляется план запроса?
План запроса, как выполнять данный запрос, составляет оптимизатор запросов.
В чем состоит стратегия оптимизации запросов?
В том, чтобы снизить стоимость COST наиболее ресурсоемких операций.
Всегда ли FULL SCAN значит снижение производительности?
Нет, в небольших таблицах FULL SCAN как раз является оптимальным решением.
Контрольные вопросы и задания для самостоятельного выполнения
1. На какие операции следует обратить внимание при чтении плана запроса?
2. Какие операции указывают на объединение нескольких таблиц?
3. Что обозначает INDEX LOOKUP?
4. Опишите способ доступа к строке таблицы ROWID.
5. Опишите соединение HASH JOIN.
Шаг 97. Подсказки оптимизатору
Планом запроса можно управлять, то есть менять план запроса для более эффективного выполнения запроса. Процесс изменения плана запроса называется стоимостной оптимизацией плана запроса.
Для изменения плана запроса используется специальный механизм подсказок.
Подсказка пишется в тексте запроса, начинается /*+ и заканчивается */. Подсказка применяется только в запросе, в котором она находится, вложенные запросы требуют своих собственных подсказок.
С помощью подсказок есть возможность оптимизировать запрос с целью увеличения скорости выполнения запроса, производительности запроса.
Подсказки оптимизатора:
Подсказка FULL управляет запросом, задает оптимизатору режим полного сканирования таблиц.
Читать дальше
Конец ознакомительного отрывка
Купить книгу