Как выполняется запрос в SQL Server 2008 - PullRequest
0 голосов
/ 20 октября 2011

Я использую SQL Server 2008 и очень хотел бы знать, как механизм выполняет запросы.

Предположим, я выполняю этот запрос:

select * from <table1> with(nolock)

или то же самое с объединением:

select * from <table1> a with(nolock) 
join <table2> b with(nolock) on a.<column1> = b.<column1> 
where <some condition>

Как работает запрос за сценой?
Есть ли способ увидеть фактические шаги, которые выполняются для выполнения и показать результаты?

Ответы [ 2 ]

4 голосов
/ 20 октября 2011

СУБД анализирует запрос и выбирает наилучший способ получения запрошенных данных в текущих условиях.

См. Отображение графических планов выполнения (SQL Server Management Studio) .

0 голосов
/ 21 октября 2011

СПИСОК 1-1 Номера шагов логической обработки запросов

(5) SELECT (5-2) DISTINCT (5-3) TOP(<top_specification>) (5-1) <select_list> (1) FROM (1-J) <left_table> <join_type> JOIN <right_table> ON <on_predicate> | (1-A) <left_table> <apply_type> APPLY <right_table_expression> AS <alias> | (1-P) <left_table> PIVOT(<pivot_specification>) AS <alias>| (1-U) <left_table> UNPIVOT(<unpivot_specification>) AS <alias> (2) WHERE <where_predicate> (3) GROUP BY <group_by_specification> (4) HAVING <having_predicate> (6) ORDER BY <order_by_list>;

Краткие этапы обработки логических запросов

■ (1) FROM Фаза FROM определяет исходные таблицы запроса и таблицу процессов операторы. Каждый оператор таблицы применяет ряд подфаз. Например, фазы в объединении участвуют (1-J1) декартово произведение, (1-J2) фильтр ON, (1-J3) добавление внешних строк. Фаза FROM генерирует виртуальную таблицу VT1.

■ (1-J1) Декартово произведение На этом этапе выполняется декартово произведение (перекрестное соединение) между две таблицы, задействованные в операторе таблиц, генерирующие VT1-J1.

■ (1-J2) ON Filter Эта фаза фильтрует строки из VT1-J1 на основе предиката, который появляется в предложении ON (). Только строки, для которых вычисляется предикат ИСТИНА вставляются в VT1-J2. (1-J3) Добавить внешние строки, если указано OUTER JOIN (в отличие от CROSS JOIN или INNER JOIN), строки из сохраненной таблицы или таблиц, для которых не найдено совпадений добавляются к строкам из VT1-J2 как внешние строки, генерируя VT1-J3.

■ (2) WHERE Эта фаза фильтрует строки из VT1 на основе предиката, который появляется в предложение WHERE (). Только строки, для которых предикат оценивает ИСТИНА вставлена ​​в VT2.

■ (3) GROUP BY На этом этапе строки из VT2 упорядочиваются по группам на основе столбца. список, указанный в предложении GROUP BY, генерирующий VT3. В конечном счете, будет один Строка результата на группу.

■ (4) HAVING Этот этап фильтрует группы из VT3 на основе предиката, который появляется в предложении HAVING (). Только группы, для которых оценки предиката TRUE вставляются в VT4.

■ (5) SELECT Эта фаза обрабатывает элементы в предложении SELECT, генерируя VT5.

■ (5-1) Оценка выражений На этом этапе выполняется оценка выражений в списке SELECT. генерация ВТ5-1.

■ (5-2) DISTINCT Эта фаза удаляет дублирующиеся строки из VT5-1, генерируя VT5-2.

■ (5-3) TOP Эта фаза фильтрует указанное верхнее число или процент строк из VT5-2 на основе логического порядка, определенного в предложении ORDER BY, генерирующего стол VT5-3.

■ (6) ORDER BY Эта фаза сортирует строки из VT5-3 в соответствии со списком столбцов. указывается в предложении ORDER BY, генерируя курсор VC6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...