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

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

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

В этом разделе мы рассмотрим запрос информации по заказам (orders), помещенным сотрудником (employee), идентификационный номер которого (employee ID) равен 4. Вот этот запрос:

SELECT OrderID, CustomerID, EmployeeID, OrderDate 
FROM Orders
WHERE EmployeeID = 4

В данной организации каждый сотрудник обрабатывает небольшую часть от всех заказов, поэтому вы, вероятно, предполагаете, что SQL Server будет использовать при обработке этого запроса индекс EmployeeID. Вместо этого Query Analyzer информирует вас, что SQL Server будет использовать доступ с помощью кластеризованного индекса PK_Orders (рис. 35.7).

Панель Estimated Execution Plan, где показано, что будет использоваться кластеризованный индекс PK_Orders

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

Чтобы оптимизатор запросов использовал вместо этого индекс EmployeeID, вы можете использовать подсказку в операторе SELECT, как показано в следующем операторе. (См. раздел "Использование подсказок" далее.)

SELECT OrderID, CustomerID, EmployeeID, OrderDate
FROM Orders WITH (INDEX(EmployeeID))
WHERE EmployeeID = 5
Примечание. В Microsoft SQL Server 7 предпочтительной подсказкой по индексам было INDEX=имя_индекса. С появлением SQL Server 2000 предпочтительной подсказкой по индексам стало INDEX(имя_индекса).

Включая в команду эту дополнительную информацию, вы указываете оптимизатору запросов, что нужно использовать нужный вам план исполнения, а не тот, что был выбран для вас оптимизатором. На рис. 35.8 показана панель Estimated Execution Plan с измененным планом. Как видно из представленного в панели метода доступа, индекс EmployeeID будет использоваться в качестве входного параметра для процесса поиска по закладкам (bookmark lookup), который выполнит затем выборку данных из базы данных. (Процесс поиска по закладкам ищет внутренний идентификатор для строки данных.)

Панель Estimated Execution Plan с измененным планом

увеличить изображение
Рис. 35.8. Панель Estimated Execution Plan с измененным планом

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

Внимание. Используя подсказку, переопределяющую план оптимизатора запросов, вы делаете это на свой страх и риск. Хотя здесь нет или почти нет опасности потери или порчи данных, вы можете ухудшить производительность системы.
Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Игорь Соловьев
Игорь Соловьев
Россия, Братск