|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Типы подсказок оптимизацииDatabase Engine поддерживает следующие типы подсказок оптимизации: · подсказки таблицы; · подсказки соединения; · подсказки запроса; · структуры планов.
Подсказки таблицы можно применить к одной таблице. Поддерживаются следующие подсказки таблицы: · index; · noexpand; · forceseek (новое в SQL Server 2008). Подсказка index служит, для указания одного или более индексов, которые затем будут использованы в запросе. Эта подсказка задается в предложении from в запросе. Можно использовать эту подсказку, чтобы осуществить доступ к индексу, если оптимизатор по различным причинам выбрал последовательное сканирование таблицы для данного запроса. Подсказка index также может быть полезной для того, чтобы не позволить оптимизатору использовать другой конкретный индекс. Пример: USE sample; SELECT * FROM new_addresses a WITH (INDEX(i_stateprov)) WHERE a.StateProvinceID = 9
Эта подсказка заставляет оптимизатор запросов использовать индекс i_stateprov. Без этой подсказки оптимизатор будет, например, выбирать сканирование таблицы.
Другая форма подсказки для запроса index, index (0), требует, чтобы оптимизатор не использовал никаких существующих индексов. USE AdventureWorks; SELECT * FROM Person.Address AS a WITH(INDEX(0)) Если кластеризованный индекс существует, то index (0) требует сканирования кластеризованного индекса. Если кластеризованный индекс не существует, то index (0) требует сканирований таблицы.
USE AdventureWorks; SELECT * FROM Person.Address a WITH(INDEX(0)) WHERE a.StateProvinceID = 32
В первом случае оптимизатор использует сканирование кластеризованного индекса по причине задания подсказки index (0).
USE AdventureWorks; SELECT * FROM Person.Address a WHERE a.StateProvinceID = 32
Без этой подсказки оптимизатор запросов выбрал сканирование некластеризованного индекса.
Подсказка noexpand указывает, что не будет раскрываться никакое индексированное представление для доступа к лежащим в его основе таблицам в то время, когда оптимизатор запросов обрабатывает запрос. Оптимизатор запросов трактует представление как таблицу без кластеризованного индекса.
Подсказка таблицы forceseek заставляет оптимизатор запросов выполнять только операцию поиска по индексу в качестве пути доступа к данным в таблице (или представлении), на которую ссылается запрос. Можно использовать эту подсказку таблицы для того, чтобы перекрыть план по умолчанию, выбранный оптимизатором запросов, для устранения проблем производительности, появившихся в результате неэффективного плана выполнения. Например, если план содержит операторы сканирования таблицы, а соответствующая таблица требуют большого количества чтений в процессе выполнения запроса, то задание операции выборки по индексу может дать лучшую производительность запроса.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |