Вступление
Продолжая мою предыдущую статью Понимание плана выполнения [Когда Таблица JOIN происходит Часть I), здесь мы описываем другой процесс выполнения плана.
Если вы не читали мою предыдущую статью, перейдите по следующей ссылке.
http://www.sqlknowledgebank.blogspot.in/2014/10/understanding-execution-plan-when-table.html
Для справки мы снова взглянем на план выполнения текущего запроса.
SELECT e.JobTitle,a.City, p.LastName+', '+p.FirstName AS EmployeeName FROM HumanResources.Employee AS e INNER JOIN Person.BusinessEntityAddress AS bea ON e.BusinessEntityID=bea.BusinessEntityID INNER JOIN Person.AddressaONbea.AddressID=a.AddressID INNER JOIN Person.PersonASp ON e.BusinessEntityID=p.BusinessEntityID;
Соединение с вложенным циклом
Если мы внимательно посмотрим на наш План выполнения, то обнаружим, что вторая операция в правом верхнем углу — это операция поиска кластерного индекса (таблица BusinessEntityAddress). Это относительно дешевле (всего 9%). Поиск является частью операции соединения, и мы можем видеть различные критерии поиска с ним. Для этого мы должны взглянуть на раздел «Поиск предикатов» в нижней части свойства всплывающей подсказки.
Вложенные циклы объединяют функции, беря набор данных, называемый внешним набором, и сравнивая его по одной строке за раз с другим набором данных, называемым внутренним набором. Ему просто нравится курсор, и фактически он один, но с соответствующим набором данных это может быть очень эффективной операцией.
Сканирование данных в таблице сотрудников и таблица поиска в таблице BusinessEntityAddress — это объединение при операции соединения с вложенным циклом. Чтобы понять это правильно, мы должны взглянуть на подсказку или свойство Nested Loop Join.
Мы можем назвать Nested Loop как Nested Iteration, поскольку операция принимает входные данные из двух наборов данных и объединяет их путем сканирования из внешнего набора данных (здесь, в нашем плане выполнения это оператор Bottom), один раз для каждой строки во внутреннем наборе. Если число строк в двух наборах данных мало, операция «Вложенный цикл» будет гораздо более эффективной. Пока внутренний набор данных мал, а внешний набор данных мал или нет индексируется, это чрезвычайно эффективный механизм объединения. За исключением случаев очень больших наборов данных, это лучший тип объединения для просмотра в плане выполнения.
Ссылки по теме
Понимание плана выполнения [Когда встречается таблица JOIN, часть I] |
http://www.sqlknowledgebank.blogspot.in/2014/10/understanding-execution-plan-when-table.html |
Понимание плана выполнения — III — C [ОПЕРАТОРЫ] |
http://www.sqlknowledgebank.blogspot.in/2014/10/understanding-of-execution-plan-iii-c.html |
Понимание плана выполнения — III — B [ОПЕРАТОРЫ] |
http://sqlknowledgebank.blogspot.in/2014/10/understanding-of-execution-plan-iii-b.html |
Понимание плана выполнения [что произошло при выполнении инструкции SQL] |
http://www.sqlknowledgebank.blogspot.in/2014/06/understanding-of-execution-plan-what.html |
Понимание плана выполнения — II [Повторное использование плана выполнения] |
http://www.sqlknowledgebank.blogspot.in/2014/10/understanding-of-execution-plan-ii.html |
http://www.sqlknowledgebank.blogspot.in/2014/10/understanding-of-execution-plan-iii-the.html |
Резюме
На следующем уровне мы должны больше обсудить наш план выполнения. Так что эта серия будет продолжена еще для нескольких статей. Пожалуйста, будьте с нами.
Надеюсь, вам понравится.