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

 

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

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

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 40 41 42 43 44 45 < 46 > 47 48 49 50 51 52 .. 161 >> Следующая


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

2. Для каждого идентификатора строки из предыдущего шага считать один блок (логическое считывание; если требуется, физическое) из таблицы Empl oyees (E),
92

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

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

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

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

5. Для каждой такой строки отбросить всю результирующую строку, если ее данные не отвечают условию UPPER(LE.Description) = 'SAN FRANCISCO'.

6. Для каждой оставшейся строки, используя условие соединения E. Manager_ ID=M. Employee_ID, перейти к индексу по первичному ключу EMPLOYEE_PKEY и найти единственный подходящий идентификатор строки, соответствующий записи сотрудника, для менеджера того сотрудника, запись которого вы уже считали. Если подходящей строки не найдено, отбросить результирующую строку, которая строится в данный момент.

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

8. Для каждой такой строки, используя условие соединения M. Locati on_ID = LM. Lo-cation ID, перейти к индексу по первичному ключу LDCATI0N_PKEY и найти единственный подходящий идентификатор строки, соответствующий записи о местоположении для менеджера сотрудника, чью запись вы уже считали. Если подходящей строки не найдено, отбросить результирующую строку, которая строится в данный момент.

9. Иначе для подходящего идентификатора строки из предыдущего шага считать один блок (логическое считывание; если требуется, физическое) из таблицы Locations (LM), используя ту часть идентификатора, где хранится адрес блока. Используя ту часть идентификатора, где хранится адрес строки, найти определенную строку, на которую ук:ыы и. идентификатор строки, и считать из нее все необходимые данные (.ілііриііч шые для псевдонима LM). Присоединить
Чтение планов выполнения в SQL Server

93

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

Интерпретация ненадежных планов выполнения

В планах выполнения часто используются методы соединения, отличные от вложенных циклов, — особенно это касается «сырых» планов, которые вам потребуется настроить. Далее я покажу вам пример, где вместо надежных соединений со вложенными циклами выполняются соединения хэшированием. Если удалить все индексы и добавить в конце запроса подсказку 0PTI0N(HASH JOIN), SQL Server создаст новый план выполнения:

StmtText

SELECT E.First_Name. E.Last_Name. E.Salary. LE.Description.

M.First_Name. M.LastJIame. LM.Description FROM Locations LE. Locationl LM. Employees M. Employees E WHERE E.Last_Name = 'Stevenson'

AND E.Manager^ID=M.Employee_ID

AND E.Location_ID=LE.Location_ID

AND M.Locati on_ID=LM.Locati on_ID

AND UPPER(LE.Description) = 'SAN FRANCISCO'

OPTION(HASH JOIN)

(I row(s) affected)

StmtText

I--Hash Matchdnner Join. .. .([LM].[Loeation_ID])=([M].[Location_ID])_)

I-Table Scan[Locations] AS [LM]))

I--Hash Matchdnner Join.

(wrapped I і ne) ...([M].[Employee_ID])=([E].[Manager_ID])_)

I--Table Scan(...(...[Employees] AS [M]))

I--Hash Matchdnner

(wrapped line) ...([E].[Location_ID])=([LE].[Location_ID])_)
Предыдущая << 1 .. 40 41 42 43 44 45 < 46 > 47 48 49 50 51 52 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100