Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5820 / 381 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00

Лекция 35: Использование SQL Query Аnalyzer и SQL Profiler

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

Выполнение какой-либо операции связывания (join) включает в себя намного больше процессов, чем будет показано в панели Estimated Execution Plan ниже в этой лекции. Операция связывания выполняет доступ к нескольким таблицам, сопровождаемый связыванием (объединением) считываемых данных. (Операции связывания рассматриваются в "Извлечение данных при помощи Transact-SQL" .) Вот пример оператора с операцией связывания:

SELECT OrderID, CustomerID, Employees.EmployeeID, FirstName, 
	LastName, OrderDate
FROM Orders JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID

Сюда включен оператор SQL-92 JOIN. Использование этого оператора является рекомендованным способом связывания в SQL Server 2000. В следующем операторе используется более традиционный синтаксис связывания, который по-прежнему поддерживается в SQL Server:

SELECT OrderID, CustomerID, Employees.EmployeeID, FirstName,  
    	LastName, OrderDate
FROM Orders, Employees
WHERE Orders.EmployeeID = Employees.EmployeeID

Любой из этих операторов T-SQL связывает таблицы Orders и Employees по колонке EmployeeID. Результирующий оценочный план исполнения показан на рис. 35.9.

 Операция связывания, показанная в панели Estimated Execution Plan

увеличить изображение
Рис. 35.9. Операция связывания, показанная в панели Estimated Execution Plan

В этой панели видно, какое из двух поддеревьев имеет более высокую стоимость. Вы также видите тип планируемой операции связывания. SQL Server поддерживает несколько операций связывания, включая хеш-связывание, связывание вложенных цепочек и связывание слиянием. При использовании комплексной операции связывания план исполнения может оказаться очень сложным. (Query Analyzer регулирует размер панели Estimated Execution Plan, чтобы вместить нужно количество ветвей.) Поскольку нашей целью является сокращение времени ЦП и количества операций ввода-вывода, вам нужно попытаться определить, можно ли выбрать лучший план исполнения. В некоторых случаях вы можете применить подсказку, указывающую использование определенного индекса, сокращая тем самым время использования ЦП и интенсивность операций ввода-вывода. Вы можете также использовать подсказки в операциях связывания таблиц. Для запроса (рис. 35.9), возможно, выбран наилучший план исполнения, поскольку в предложении FROM связывание является единственной операцией.

Просмотр плана для операции агрегирования

Показанный здесь оператор T-SQL выполняет не только операцию связывания, но также операцию агрегирования:

SET QUOTED_ IDENTIFIER ON 
GO 
SELECT CustomerID, SUM("Order Details".UnitPrice)
FROM Orders JOIN "Order Details" ON Orders.OrderID = "Order Details".OrderID
GROUP BY CustomerID

Панель Estimated Execution Plan для этой комплексной операции показана на рис. 35.10.

Операция агрегирования, представленная в панели Estimated Execution Plan

увеличить изображение
Рис. 35.10. Операция агрегирования, представленная в панели Estimated Execution Plan
Примечание. Поскольку имя таблицы Order Details содержит ключевое слово и пробел, здесь должен использоваться параметр SET QUOTED_IDENTIFIER ON. Это позволяет указывать имя таблицы Order Details в кавычках. Для получения более подробной информации по этому параметру найдите "SET QUOTED_IDENTIFIER" Books Online.
Просмотр плана для хранимой процедуры

Для просмотра плана исполнения хранимой процедуры нужно просто вызвать эту хранимую процедуру из окна Query Analyzer. В панели Query Analyzer будет выведен оценочный план вызванной вами хранимой процедуры. На рис. 35.11 показан план для процедуры sp_who. (Отметим, что план исполнения этой широко используемой хранимой процедуры очень сложен.) Вы можете просматривать план исполнения хранимой процедуры, не зная, какие операторы T-SQL образуют эту процедуру.

План исполнения хранимой процедуры, показанный в панели Estimated Execution Plan

увеличить изображение
Рис. 35.11. План исполнения хранимой процедуры, показанный в панели Estimated Execution Plan