Программирование >>  Полное сканирование таблицы 

1 ... 23 24 25 [ 26 ] 27 28 29 ... 107


2 FILTER

1810

6 TBSCAN

1810

7 SORT

1810

В NLJOIN

1810

9 FETCH

EMPLOYEES

10 RIDSCN

11 SORT

12 IXSCAN

EMP FIRST NAME

11 SORT

14 IXSCAN

EMP NICKNAME

9 FETCH

WAGE PAYMENTS

16 IXSCAN

WAGE PYMNT EMP ID

17 recorcKs) selected.

Шаги со значениями идентификатора OPERATOR ID с И до 15 обозначают сбор объединения наборов идентификаторов строк по условиям для имени, объединенным OR, для таблицы Е. Новый результирующий набор идентификаторов строк передается в шаг с OPERATOR ID=10 для получения набора сотрудников с выбранным именем или прозвищем. Из этого списка DB2 выбирает выполнение вложенных циклов (NLJOIN) по направлению к Wage Payments. Циклы останавливаются, как только появляется первое соответствие, так как это коррелированное соединение ЕХ ISTS. Это соединение со вложенными циклами обозначено как 0PERAT0R ID=9. Оно отбрасывает все записи таблицы Employees, для которых подзапрос не находит соответствия в Wage Payment. Так как DB2 считает, что на данный момент у нее все еще есть длинный список записей Employees, она выбирает единственное считывание таблицы Locations и соединение слиянием (MSJOIN) с записями Employees с сортировкой обоих наборов строк по ключам соединения.

Чтение планов выполнения в SQL Server

в Microsoft SQL Server применяется несколько подходов к созданию и отображению планов выполнения. При этом планы вьшолнения создаются и выводятся на экран в графическом или текстовом виде, а не помещаются в таблицы, как это делается в DB2 и Oracle.

ПРИМЕЧАНИЕ-

Если вы купили эту книгу, чтобы научнты:я настраивать Sybase Adaptive Server, мужайтесь. У этих двух баз данных общее наследие, и практически все, что я расскажу о Microsoft SQL Server, можно применить и к Sybase, кроме возможности графического отображения плана в SQL Server Query Analyzer, которую Microsoft добавил после того, как эти две версии разделились.

Отображение планов выполнения

в SQL Server реализованы два подхода к отображению планов вьшолнения: графический, встроенный в SQL Server Query Analyzer, и текстовый, который поддерживает сама база данных. На одном экране графического варианта не помещается полный план вьшолнения даже многотабличного запроса среднего размера.



ПРИМЕЧАНИЕ

Если вы работаете в Sybase, просто замените выражение SHOWPLAN TEXT словом SHOWPLAN. Если вы хотите получить более подробный плаи выполнения, в Microsoft SQL Server также можно использовать оператор SHOWPLAN ALL.

Если вьшолнить предыдущие команды на пустых таблицах, но иметь при этом статистику, то в окне результатов появится следующий выход (несущественный текст я заменил знаком многоточия и, чтобы выход помещался на страницу, добавил выражение (wrapped 1 ine), указывая, что строка продолжается): StmtText

SELECT Е.First Jame. Е.Last Jame. E.Salary. LE.Description.

M.First Jame. M.Lastjame. LM. Description FROM Locations LE. Locations LM, Employees M. Employees E

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

Каков порядок соединения?

Какой метод используется для каждого соединения?

Какой метод используется для доступа к каждой таблице?

При использовании текстового варианта отображения плана выполнения легко найти ответы на все три вопроса.

Графическое отображение планов выполнения

Чтобы увгщеть графический вариант плана выполнения, нажмите на кнопку Display Estimated Execution Plan в утилите SQL Server Query Analyzer. В окне, где вы обычно видите результаты запроса, будет показана диаграмма, состоящая из стрелок, соединяющих набор значков и обозначающих тип действия (вложенные циклы, индексное считывание, табличный доступ и т. д.). Рядом с каждым значком есть текст, но он обычно достаточно краток, поэтому не содержит ничего полезного. Подведите к тексту курсор мыши, чтобы рас1фыть окно, в котором будут приведены недостающие подробности. Кроме того, даже для простого четырехстороннего соединения диаграмма не помещается на экран целиком, даже если раскрыть окно Query Analyzer на полный экран. Мне графический подход кажется менее полезным, чем текстовый, на котором можно прочитать все необходимое.

Текстовое отображение планов выполнения

в этом случае необходимо поместить запрос в окно Query в SQL Server Query

Analyzer после оператора SET SHOWPLAN TEXT ON и нажать кнопку Execute Query.

SET SHOWPLAN TEXT ON GO

SELECT E.First Name, E.Lastjame. E.Salary. LE.Description.

M.Firstjame. M.Lastjame. LM.Description FROM Locations LE. Locations LM. Employees M. Employees E WHERE E. Last Jame = Stevenson

AND E.Manager ID=M.Emp1oyee ID

AND E.Location ID=LE.Location IO

AND M.Location ID=LM.Location ID

AND UPPER(LE.Description) = SAN FRANCISCO



WHERE Е.Lastjame -= Stevenson

AND E.Manager ID=M.Employee ID

AND E.Location ID=LE.Location ID

AND M.Location ID=LM.Location ID

AND UPPER(LE.Description) - SAN FRANCISCO

(1 row(s) affected)

Stmtlext

l-Bookmark Lookup(BO0KMARK:([Bmkl001]). OBJECT:([my acct].[dbo].[Locations] AS [LM])) I--Nested Loops(Inner Join)

[--Bookmark Lookup(...(...[Employees] AS [M])) I I--Nested Loopsdnner Join) I --Filter(WHERE:(upper([LE].[Description])=

(wrapped line) SAN FRANCISCO))

(-Bookmark Lookup(,..(...[Locations] AS [LE])) (--Nested Loopsdnner Join)

I --Bookmark Lookup(...(...[Employees]

(wrapped line) AS [E]))

I I I --Index Seek(...(...[Employees],

(wrapped line) [Emp Last Name] AS [E]). SEEK:([E].[Last Name]=Stevenson)

(wrapped line) ORDERED)

I I (--Index

(wrapped line) Seek(...(.. .[Locations].[Location PKey]

(wrapped line) AS [LE]). SEEK:([LE].[LocationJD]=[E].[Location ID])

(wrapped line) ORDERED)

I (--Index Seek(...(...[Employees].[Employee PKey]

(wrapped line) AS [M]). SEEK:([M].[EmployeeJD]=[E].[Manager ID]) ORDERED)

(--Index Seek(...(...[Locations].[Location PKey]

(wrapped line) AS [LM]). SEEK:([LM].[LocationJD]=[M].[LocationJD])

(wrapped line) ORDERED)

(12 row(s) affected)

После первого выполнения анализа запроса две верхние строки, аетивизирую-щие выражение SHOWPLAN TEXT, более не требуются. Для всех следующих запросов будут показаны только планы, пока вы не щелкнете по кнопке Query Analyzer Execute Query, чтобы выполнить следующую команду:

SET SHOWPLAN TEXT OFF GO

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

План выполнения читается следующим образом.

Все соединения проводятся при помощи вложенных циклов, на что указывает группа строк с выражением Nested Loopsdnner Join). Если вы используете различные методы соединения, первым будет выполнено соединение, находящееся максимально глубоко. Порядок выполнения соединений следует читать снизу вверх.

Порядок доступа к таблицам: Empl oyees (Е), Locati ons (LE), Empl oyees (M), Locati ons (LM) - в выходе плана выполнения они перечислены в обратном порядке. Если SQL-сервер обращается к одной таблице несколько раз, необходимо указывать псевдонимы для этой таблицы. Так как в плане выполнения псевдонимы указаны явно, нет никакой неопределенности относительно того, какой шаг выполняется для какого псевдонима.



1 ... 23 24 25 [ 26 ] 27 28 29 ... 107

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика