|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Подсказки запросаСуществует несколько подсказок запроса, которые используются для различных целей. Рассматриваются две подсказки запроса: · FAST n; · OPTIMIZE FOR.
Список других подсказок запроса можно найти в документации. Подсказка FAST n указывает, что запрос оптимизируется для быстрого поиска первых n строк. После того, как первые n строк будут получены, запрос продолжит свое выполнение и создаст полный набор результата. Эта подсказка может быть очень полезной, если имеется очень сложный запрос с множеством результирующих строк, требующих большого количества времени для их обработки. Обычно запрос выполняется полностью, а затем система отображает его результат. Эта подсказка запроса требует, чтобы система отображала первые n строк сразу после их обработки.
Подсказка optimize for заставляет оптимизатор запросов использовать конкретное значение для локальной переменной, когда запрос компилируется и оптимизируется. Это значение используется только в процессе оптимизации запроса, но не в процессе его выполнения. Эта подсказка запроса может быть использована, когда задаются структуры планов (см. далее).
Пример: показано использование подсказки запроса optimize for. DECLARE @city_name nvarchar(30) SET @city_name = 'Newark' SELECT * FROM Person.Address WHERE City = @city_name OPTION (OPTIMIZE FOR (@city_name = 'Seattle'));
Хотя значение переменной @city_name установлено в Newark, подсказка OPTIMIZE FOR заставляет оптимизатор использовать значение Seattle для этой переменной при оптимизации запроса.
Структуры планов Подсказки явно задаются в операторе select для оказания влияния на работу оптимизатора запросов. Иногда нельзя изменять текст в операторе select напрямую. В этом случае можно повлиять на выполнение запросов, используя структуры планов. Другими словами, структуры планов дают возможность использовать отдельную подсказку оптимизации каждый раз, когда выполняются ее условия, без изменения синтаксиса оператора. Структуры планов создаются при помощи системной процедуры sp_create_plan_guide. Эта процедура создает структуру плана для ассоциированных подсказок запроса или для фактических планов запросов для запросов к базе данных. Другая системная процедура, sp_control_plan_guide, включает, отключает или удаляет существующую структуру плана.
Database Engine поддерживает следующие типы структур планов: · SQL. Соответствует запросам, которые выполняются в контексте одиночных операторов Transact-SQL или пакетам, которые не являются частью объекта базы данных; · OBJECT. Соответствует запросам, которые выполняются в контексте подпрограмм и триггеров DML; · TEMPLATE. Соответствует одиночным запросам, параметризованным к указанной форме. Для редактирования информации, связанной со структурой планов, используйте представление просмотра каталогов sys.plan_guides. Это представление содержит одну строку для каждой структуры плана в текущей базе данных. Наиболее важными столбцами являются plan_guide_id, name и query_text. Столбец plan_guide_id задает уникальный идентификатор структуры плана, a name определяет ее имя. Столбец query_text задает текст запроса, для которого создана структура плана.
Оптимизатор запросов является частью Database Engine, которая принимает решение, как лучше выполнить запрос. Он генерирует несколько планов выполнения запроса для заданного запроса и выбирает план с наименьшей стоимостью. Фаза оптимизации запроса может быть разделена на следующие фазы: анализ запроса, выбор индекса и выбор порядка выполнения соединения. В процесс выполнения фазы анализа запроса оптимизатор просматривает запрос с целью определения аргументов поиска, наличия операторов or и существования критериев соединения — в указанном порядке. Идентификация аргументов поиска позволяет оптимизатору принять решение, будут ли использоваться один или более существующих индексов. Порядок, в котором две или более соединяемых таблиц записаны в предложении from оператора select, никак не влияет на решения оптимизатора относительно порядка их обработки. Database Engine поддерживает три различные техники обработки соединения, которые могут быть использованы оптимизатором. То, какую технику выберет оптимизатор, зависит от существующих статистических данных для соединяемых таблиц. Database Engine поддерживает множество инструментов, которые могут быть использованы для редактирования существующих планов. Наиболее важными являются инструменты текстового и графического отображения планов и представления динамического управления (DMV). Можно повлиять на работу оптимизатора, используя подсказки оптимизации. Database Engine поддерживает много подсказок оптимизации, которые могут быть объединены в следующие группы: подсказки таблицы, подсказки соединения и подсказки запроса.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |