Преподаватель
Опубликован: 11.12.2006 | Уровень: специалист | Доступ: свободно

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

Подсказки для запросов

Подсказки для запросов используются для указания того, как следует выполнять определенные операции запроса. Подсказки для запросов разбиты на три категории: GROUP BY, UNION и остальные.

Подсказки GROUP BY. Следующие подсказки указывают, как следует выполнять операции GROUP BY или COMPUTE.

  • HASH GROUP BY. Указывает, что для выполнения операции GROUP BY будет использоваться хеш-функция
  • ORDER GROUP BY. Указывает, что для выполнения операции GROUP BY будет использоваться операция сортировки.

Используя пример GROUP BY из раздела "Просмотр плана для операции агрегирования" выше в этой лекции, мы можем указать с помощью подсказки, как должна выполняться операция HASH GROUP BY:

SELECT CustomerID, SUM(OrderDetails.UnitPrice) 
    	FROM Orders, OrderDetails 
    	GROUP BY CustomerID 
    	OPTION (HASH GROUP)
Примечание. Подсказки типа GROUP BY являются взаимоисключающими – можно одновременно использовать только одну подсказку.

Подсказки UNION. Следующие подсказки используются для указания того, как следует выполнять операции UNION.

  • MERGE UNION. Для выполнения операции UNION используется операция MERGE.
  • HASH UNION. Для выполнения операции UNION используется хеш-функция.
  • CONCAT UNION. Для выполнения операции UNION используется функция конкатенации.

Вот пример использования подсказки CONCAT UNION:

SELECT OrderID, CustomerID, EmployeeID, OrderDate
    	FROM orders 
    	WHERE CustomerID = 'TOMSP' 
UNION 
SELECT OrderID, CustomerID, EmployeeID, OrderDate  
    	FROM orders 
    	WHERE EmployeeID = '4' 
OPTION (CONCAT UNION)
Примечание. Подсказки типа UNION являются взаимоисключающими.

К сожалению, не существует какой-либо "секретной формулы", которую можно использовать для определения наиболее подходящей операции UNION в вашей ситуации. И здесь лучше всего использовать Query Analyzer для опробования различных подсказок UNION, чтобы посмотреть, какая из них дает наилучшую стоимость. Обычно наилучшую стратегию для операций UNION определяет оптимизатор запросов SQL Server.

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

  • FORCE ORDER. Указывает, что доступ к таблицам должен выполняться в том же порядке, как они представлены в запросе. По умолчанию SQL Server может изменять порядок следования таблиц.
  • ROBUST PLAN. Указывает, что оптимизатор запросов должен быть готов к максимально возможному размеру строк. Вот пример использования этой подсказки:
    SELECT OrderID, CustomerID, Employees.EmployeeID, FirstName,  
        	LastName, OrderDate 
    FROM Orders, Employees 
    WHERE Orders.EmployeeID = Employees.EmployeeID 
    OPTION (ROBUST PLAN)
Подсказки для таблиц

Подсказки для таблиц используются, чтобы управлять способом доступа к таблицам.

Здесь описаны две подсказки для таблиц.

  • FAST n.Заменяет FASTFIRSTROWS, сохраненную для обратной совместимости. Эта подсказка указывает SQL Server, что нужно оптимизировать выборку n первых строк данных.
  • INDEX = имя_индекса. Указывает оптимизатору запросов, что нужно использовать указанный индекс, когда имеется такая возможность. В одном из первых примеров этой лекции показано, как использовать подсказку INDEX. Мы повторяем здесь этот пример:
    SELECT OrderID, CustomerID, EmployeeID, OrderDate
        	FROM orders WITH (INDEX = EmployeeID) 
        	WHERE EmployeeID = 5 
        	OPTION (FAST 10)

Квалификатор WITH не является обязательным.

Подсказка INDEX = EmployeeID указывает, что должен использоваться индекс EmployeeID. Если указана подсказка FAST 10, то SQL Server будет оптимизировать выборку первых 10 строк (если возможно) и затем будет возвращать остальные строки.

Заключение

В этой лекции вы узнали, как использовать Query Analyzer для определения плана исполнения и методов доступа к данным, наиболее подходящих для данного запроса. Кроме того, вы узнали, как использовать Profiler для просмотра операторов T-SQL, которые выполняются в вашей системе, и как запускать трассировки, чтобы определить наличие некоторых операторов T-SQL, возможно, вызывающих проблемы производительности. Вы также узнали, как оптимизировать план исполнения и методы доступа к данным, исходя из структуры вашей базы данных и ваших данных. И, наконец, вы узнали, как использовать подсказки для указания того, что должен использоваться определенный план исполнения или метод доступа к данным. В "Разрешение наиболее распространенных проблем производительности" эта тема будет развита: вы узнаете о проблемах производительности и способах их разрешения.

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Игорь Соловьев
Игорь Соловьев
Россия, Братск