Здесь SELECT FIRSTNAME, LASTNAME FROM MAN WHERE CITYCODE> 1; может быть изменен на любой другой запрос.
После выполнения данной команды можно посмотреть план запроса с помощью команды:
SELECT * FROM TABLE (DBMS_XPLAN. DISPLAY (NULL, NULL,«BASIC»));
Во многих редакторах есть специальные средства для просмотра плана запроса, подобный инструмент есть и в ORACLE Appex.
Рисунок 245. План запроса: сервис APEX
В плане запроса указываются таблицы, используемые в запросе, стоимость и время выполнения каждой операции в запросе.
Как читать план запроса?
План запроса читается с самого дальнего уровня: читается операция самого максимального уровня вложения.
На представленном плане запроса:
• Операция — операция;
• OPTION — доступ к данным;
• Объект — таблица или представление, из которого выбираются данные;
• ROWS — количество строк, которое извлекается операцией;
• TIME — условное время, за которое выполняется та или иная операция;
• COST — стоимость операций для оптимизатора.
Наибольшее внимание следует обратить на параметр COST — это стоимость той или иной операции, стоимость выполнения данной операции и совокупности операций извлечения данных.
Следует стремиться к тому, чтобы минимизировать параметр Cost при выполнении данного запроса. Для этого следует обратить внимание на использование индексов в таблицах запроса, правильное построение связей. Разберем несколько планов запросов: во-первых, план с рисунка.
— Таблица AUTO: извлекаются все строки из таблицы, стоимость операции 7 (COST), извлекается 10 строк, стоимость операции 7.
— Осуществляется обращение к таблице MAN, которое происходит по UNIQUE INDEX SCAN, извлекается 1 строка (ROW), стоимость операций 0 для каждой строки таблицы AUTO.
— Для объединения двух таблиц (операции 1, 2) используются вложенные циклы NESTED LOOP, в результате операции получаем 5 строк, стоимость данной операции 7 складывается из стоимости операций 1 плюс стоимость операций 2.
— Для связанных данных используется операция группировки, 3 строки, общая стоимость 8.
— Результат помещается в запрос (3 строки).
Далее осуществляется операция группировки со стоимостью cost 8.
Ниже представлен список операций, которые используются, и опций доступа к данным.
Разбор запроса на связь двух таблиц AUTO, MAN.
Рисунок 246. План запроса: AUTO, MAN
1) Из таблицы AUTO извлекаются 7 строк — стоимость 3.
2) Из таблицы по идексу извлекаются 9 строк — стоимость 2+1.
3) Обьединение извлеченных строк MERGE JOIN — общая стоимость 6.
Общий результат — стоимость 6, извлечено 7 строк.
Пример 2.Разбор плана запроса на объединение двух таблиц с ограничением MARK = «BMW».
1) Из таблицы AUTO извлекаются 2 строки — стоимость 3 (ограничение BMW).
2) Из таблицы по индексу извлекается 1 строка — стоимость 1.
3) Объединение извлеченных строк с помощью вложенных циклов — общая стоимость 6.
Объединенный результат — стоимость 5, извлечено 2 строки.
Простой пример демонстрации работы индексов:
Рисунок 247. План запроса без индекса
Полное сканирование таблицы (FULL), стоимость 530.
Рисунок 248. План запроса с использованием индекса
Сканирование по индексам — стоимость 3, почти в 150 раз меньше. Демонстрация эффективного использования индексов.
Полное сканирование таблицы при поиске. Просматривается последовательно каждая строка таблицы.
Просмотр значения по заданному индексу. Возвращается уникальный идентификатор ROWID, по ROWID осуществляется доступ к нужной строке таблицы.
Для поиска значения используется уникальный индекс. Находится только одно значение.
Используется, когда необходимо выбрать по индексу диапазон значений, операции BETWEEN,>, <, <>,> =, <=. Или для условий равенств, например LASTDOC=10.
Полное сканирование индекса. Применяется, если все данные могут быть извлечены только с применением индекса.
Быстрое сканирование. Используется при параллельном доступе. Не осуществляет сортировку считанных данных. Может применяться только тогда, когда все столбцы, участвующие в запросе, присутствуют в индексе и имеют ограничение NOT NULL.
Используется при доступе по составному индексу.
Читать дальше
Конец ознакомительного отрывка
Купить книгу