1

Я использую SQL Server 2008 R2. Я создал временную таблицу, и я заполняю таблицу temp 1000 строк.SQL Server использует вложенные петли из-за плохого оценочного количества строк

Create Table #Temp 
(
    ID Int, 
    res INT 
) 

Insert Into #Temp 
VALUES (10004, 2246), (10005, 2246), (10006, 2246), (10007, 2246), 
     (10008, 2246), (10009, 2246), (10010, 2246), (10011, 2246), 
     (10013, 2246), (10014, 2246), (10015, 2246), (10016, 2246), 
     (10017, 2246), (10018, 2246), (10019, 2246), (10020, 2246), 
     (10021, 2246), ................ 

У меня есть другая таблица с именем Item. Он имеет около 30000 записей.

У меня есть INNER JOIN между Item и моей временной таблицей.

Select 
    * 
From 
    Inventory.Item 
Inner Join 
    #Temp On (#Temp.ID = item.MasterID And MRes = ExRestaurantID) 

Как вы можете видеть в трех изображениях ниже, SQL Server создает план выполнения моего запроса, но в своем плане, он подсчитал, что мой Item таблица имеет только одну строку и из-за того, что он использовал вложенными Петли соединяются.

enter image description here

enter image description here

enter image description here

Дозы Кто-нибудь знает, почему SQL Server ожидал только один строки для таблицы Item?

+1

По оценкам, сканирование вернет 1000 строк 1 раз, и, по его оценке, поиск вернет 1 строку 1000 раз. Обе оценки были правильными. – GSerg

ответ

7

Оценки в точности верны.

Несколько смешения на внутренней части вложенных циклов оценочное число строк за выполнение но фактическое количество строк агрегируется по все казни.

Он оценивает 1 строку за выполнение и 1000 казней, и вы получаете фактическое количество строк 1000.

Там нет расхождения.

 Смежные вопросы

  • Нет связанных вопросов^_^