Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Тоу Д. -> "Настройка SQL. Для профессионалов" -> 35

Настройка SQL. Для профессионалов - Тоу Д.

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 29 30 31 32 33 34 < 35 > 36 37 38 39 40 41 .. 161 >> Следующая


1. Поместите чистый SQL-код, анализ которого требуется произвести, в файл tmp. sql в том же каталоге, где находятся ex. sql, head. sql и tai I. sql.

2. В сеансе SQL* Plus, запущенном из того же каталога, в строке приглашения SQL> выполните команду @ех.

3. Просмотрите план выполнения.

4. Настройте базу данных (например, изменив индекс) и рассматриваемый SQL-код в tmp.sql (следуя методам, описанным в главе 4).

5. Сохраните файл tmp.sql и перейдите к шагу 2. Повторяйте действия, пока не получите желаемый план выполнения, а затем сохраните правильный результат где-либо для постоянного хранения.

Теперь для того, чтобы внести изменения и увидеть результаты, требуется потратить лишь несколько секунд. Если вы хотите распечатать план выполнения или просмотреть его в текстовом редакторе (особенно если он большой), то это тоже можно сделать практически мгновенно, поскольку он хранится в файле tmp.out.

В других операционных системах, отличных от Unix, тоже можно попробовать использовать подобные методы работы или же просто дописать содержимое файла head. sql в начало tmp. sql, содержимое tai I. sql в конец tmp. sql и выполнить @tmp в строке с приглашением SQL>. Этот вариант можно использовать во всех операционных системах.

На практике оказывается, что половина всех изменений, которые вы внесете при настройке плана выполнения, будет сделана в tmp. sql, а вторая половина — в среде базы данных при помощи SQL*Plus. Причем это может быть создание и удаление индексов, создание статистики по таблицам и индексам или изменение параметров для оптимизации сеанса.

Надежные планы выполнения

При настройке SQL вы обычно хотите убедиться, что получаете простые планы выполнения, которые выполняют вложенные циклы в правильном порядке соединения. Я называю такие планы выполнения надежными, так как они обычно хорошо справляются с большими объемами данных. В этом примере возвращается надежный план, упрощающий процесс, для следующего кода SQL, записанного в tmp.sql:

-- File called tmp.sql

SELECT /*+ RULE */ E.First_Name. E.Last_Name. E.Salагу.

LE.Description. M. First JJame. M.Last_Name. LM.Description FROM Locations LE. Locations LM. Employees M, Employees E WHERE E.Last_Name = :1 AND E.Manager_ID=M.Employee_ID AND E.Location_ID=LE.Location_ID AND M.Location_ID=LM.Location_ID AND UPPER(LE.Oescription)=:2:

Если в утилите SQL*Plus, запущенной из каталога, где находятся tmp.sql, head. sql, tai I. sql и ex. sql, выполнить команду Pex из строки с приглашением SQL>, то мы получим следующий ответ с индексами только по первичным ключам и по Employees(Last_Name):
Чтение планов выполнения в Oracle

71

SQL> @ех PLAN

SELECT STATEMENT NESTED LOOPS NESTED LOOPS NESTED LOOPS TABLE ACCESS BY INDEX ROWID 4*EMPL0YEES INDEX RANGE SCAN EMPLOYEE_LAST_NAME TABLE ACCESS BY INDEX ROWID 3*EMPL0YEES INDEX UNIQUE SCAN EMPLOYEEPKEY TABLE ACCESS BY INDEX ROWID 2*L0CATI0NS INDEX UNIQUE SCAN LOCATIONPKEY TABLE ACCESS BY INDEX ROWID 1*L0CATI0NS INDEX UNIQUE SCAN LOCATION_PKEY

SQL>

ПРИМЕЧАНИЕ -----------------------------------------------------------------------------------

В предыдущем примере подсказка RULE использовалась исключительно для удобства. Это не означает, что вы должны предпочесть синтаксический оптимизатор RULE — это всего лишь удобный способ получения воспроизводимого плана с вложенными циклами на пустых таблицах, что я и хотел продемонстрировать.

Как интерпретировать план

Для чтения полученного плана выполнения применяется определенная последовательность операций.

¦ Все соединения проводятся методом вложенных циклов и показаны как вложенная группа строк NESTED LOOPS. Если вы используете разные методы соединения, то первым будет выполнено самое внутреннее соединение (с самым большим отступом в записи), то есть последнее перечисленное. Порядок выполнения соединений следует читать изнутри наружу или снизу вверх.

ПРИМЕЧАНИЕ ---------------------------------------------------------------

Стандартный способ отображения планов выполнения в Oracle может несколько смутить начинающего разработчика. Если бы вы собирались реализовать похожие вложенные циклы в виде собственной процедуры, то первое соединение, показанное как цикл, находящийся максимально глубоко, было бы на самом деле внешним циклом в реальной структуре вложенных циклов! Когда я писал первый черновик главы 2, то по ошибке назвал выполняемое первым соединение с вложенными циклами циклом с наибольшей глубиной, поскольку так привык к способу отображения планов выполнения в Oracle. Конечно, альтернативный метод отображения мог бы быть полезен, если бы всем удалось к нему немедленно привыкнуть. К сожалению, множество инструментов и огромное количество практики и обучения приучили разработчиков в Oracle использовать именно такую форму вывода результатов, поэтому попытка изменить что-либо привела бы к неразберихе. Если вы новичок в этом деле, мужайтесь — скоро и вы привыкнете.

¦ Порядок доступа к таблицам. Дважды происходит обращение к таблице Empl oyees, а затем дважды к таблице Locati ons. В таком же порядке они перечислены в плане выполнения. Когда сервер обращается к одним и тем же таблицам несколько раз, псевдонимы для таблиц обязательны. Как можно видеть в примере в выражении FROM, для таблицы Empl oyees есть два псевдонима — E и М. Изучая индек-
Предыдущая << 1 .. 29 30 31 32 33 34 < 35 > 36 37 38 39 40 41 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100