План выполнения SQL показывает «Фактическое количество строк», которое больше, чем размер таблицы - PullRequest
5 голосов
/ 17 июня 2009

У меня есть план выполнения для довольно сложного объединения, в котором показано, что поиск по индексу выполняется для таблицы с показателем «Фактическое количество строк» ​​~ 70 000, тогда как в действительности в таблице всего ~ 600 строк (оценочное количество строк составляет всего 127).

Обратите внимание, что все статистические данные обновлены, и входные параметры запроса в точности совпадают с параметрами, которые были введены при компиляции proc.

Почему фактическое количество строк так велико, и что на самом деле означает число «Фактическое количество строк»?

Моя единственная теория заключается в том, что большое количество строк связано с вложенными циклами.и что этот поиск по индексу выполняется несколько раз - «Фактическое количество строк» ​​действительно представляет общее количество строк по всем выполнениям.Если это так, то предполагаемое количество строк также должно быть общим числом строк во всех исполнениях?

Ответы [ 2 ]

10 голосов
/ 17 июня 2009

ActualRows подсчитывает, сколько раз GetNext () был вызван для физического оператора.

Вы также должны взглянуть на ActualRebinds, ActualRewinds и ActualEndOfScans , чтобы понять, сколько раз внутренний цикл был переоценен:

A rebind означает, что один или несколько коррелированные параметры объединения изменилось и внутренняя сторона должна быть перепроверены. перемотка означает, что нет коррелированные параметры изменены и предыдущий внутренний набор результатов может быть повторно.

3 голосов
/ 17 июня 2009

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

...