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

 

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

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

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


1. Используя условие E. Last_Name = : 1, перейти к индексу EMPLOYEE_LAST_NAME и найти список идентификаторов строк, соответствующих сотрудникам с указанной фамилией.

2. Для каждого из этих идентификаторов строк перейти к таблице Employees (E)

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

3. Для каждой такой строки, используя условие соединения E. Manager_ID=M. Empl oyee_ID, перейти к индексу по первичному ключу EmploYEEJ3KEY и найти один подходя-
74

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

щий идентификатор строки, соответствующий записи сотрудника для менеджера того работника, чью запись вы уже считали ранее. Если соответствия не найдено, отбросить результирующую строку, которая строится в данный момент.

4. Если же подходящая запись найдена, следует перейти к таблице Employees (И)

и, используя ту часть идентификатора строки, где хранится адрес блока, считать один блок (логическое считывание, если требуется — физическое), соответствующий идентификатору строки из предыдущего шага. Используя ту часть идентификатора строки, где хранится адрес записи, найти ту строку, на которую указывает этот идентификатор, и считать из нее все необходимые данные (запрошенные для псевдонима М). Присоединить подходящие данные к строке, полученной при предыдущем считывании из таблицы, чтобы создать частичную результирующую строку.

5. Для каждой такой строки, используя условие соединения M. Locat і on_I D=LM. Loca -tion_ID, перейти к индексу по первичному ключу LOCAT10N_PKEY и найти единственный подходящий идентификатор строки, указывающий на запись о местоположении, соответствующую менеджеру сотрудника, запись которого вы уже считали. Если соответствия не найдено, отбросить результирующую строку, которая строится в данный момент.

6. Если искомое соответствие все же найдено, для подходящего идентификатора строки перейти к таблице Locations (LM) и, используя ту часть идентификатора строки, где хранится адрес блока, считать один блок (логическое считывание, если требуется — физическое), соответствующий идентификатору строки из предыдущего шага. Используя ту часть идентификатора строки, где хранится ее адрес, найти определенную строку, на которую указывает данный идентификатор, и считать из нее все необходимые данные (запрошенные для псевдонима LM). Присоединить подходящие данные к строке, полученной при предыдущих считываниях из таблиц, чтобы создать частичную результирующую строку.

7. Для каждой подобной строки, используя условие соединения E. Loeati on_ID=LE. Loeati on_ID, перейти к индексу по первичному ключу L0CATI0N_PKEY и найти единственный подходящий идентификатор строки, обозначающий запись о местоположении для сотрудника, чью запись вы уже считали. Если соответствия не найдено, отбросить результирующую строку, которая строится в данный момент.

8. В ином случае для подходящего идентификатора строки перейти к таблице Loeati ons (LE) и, используя ту часть идентификатора строки, где хранится адрес блока, считать один блок (логическое считывание, если необходимо — физическое), соответствующий идентификатору строки из предыдущего шага. Используя ту часть идентификатора строки, где хранится адрес строки, найти определенную строку, на которую указывает идентификатор строки, и считать из нее все необходимые данные (запрошенные для псевдонима LE). Присоединить подходящие данные к строке, полученной при предыдущих считываниях из таблиц, чтобы завершить результирующую строку. Отбросить всю результирующую строку, если она содержит данные, не удовлетворяющие условию UPPER( LE. Deseri pti on)=: 2. Иначе немедленно возвратить полностью построенную результирующую строку.
Чтение планов выполнения в Oracle

75

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

В плане выполнения вы не найдете явного шага для последнего фильтра, который отбрасывает строки, не удовлетворяющие условию для описания местоположения. Я называю этот фильтр фильтром ^осле считывания», так как он не является частью метода обращения к строке таблицы, а лишь используется для удаления некоторых строк уже после того, как те были считаны. Oracle не выполняет удаление по подобным фильтрам явно в плане выполнения, но вы всегда можете рассчитывать, что Oracle сделает это при первой же возможности, как только получит данные, необходимые для оценки истинности условий фильтров. Если в плане выполнения есть еще соединения после этого последнего соединения, Oracle будет выполнять их только для строк, которые прошли фильтр послесчитывания, отбрасывая остальные.

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

Настраиваемые вами планы для SQL-запросов зачастую сначала будут ненадежными, внося свой вклад в проблему недостаточной производительности, которую вам следует решить. В таких ненадежных планах выполнения используются методы соединения, отличные от вложенных циклов. От вас не требуется глубокого понимания тех планов выполнения, которые нельзя считать оптимальными, нужно только суметь увидеть, что это не те планы, которые вы хотите получить. Однако полезно иметь хотя бы общее представление о том, почему эти планы выполнения такие медленные, и знать, насколько лучше будут ваши оптимальные планы. Теперь я покажу, как выглядят альтернативные планы выполнения для запроса, с которым мы работали в последних двух разделах. Если я удалю все индексы, синтаксический оптимизатор создаст новый план выполнения:
Предыдущая << 1 .. 31 32 33 34 35 36 < 37 > 38 39 40 41 42 43 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100