1

SQL Server 2008 R2를 사용합니다. 임시 테이블을 만들었고 임시 테이블에 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 서버 내 쿼리에 대한 실행 계획을 만들었습니다하지만 그의 계획에, 그것은 내 Item 테이블이 하나 개의 행이있는 것으로 추정하고 그 때문에이 중첩을 사용하고있다 루프가 참여합니다. SQL Server가 항목 테이블의 한 행을 예상 한 이유

enter image description here

enter image description here

enter image description here

용량의 아는 사람?

+1

스캔이 1000 개의 행을 1 회 반환한다고 예상하고 탐색이 1 행 1000 번을 반환 할 것으로 예상했습니다. 두 견적은 모두 정확했습니다. – GSerg

답변

7

견적은 정확합니다. 다소 혼동 중첩 루프 안쪽

행의 수가 예상 실행하지만 실제 행 수가 되는 전체 실행을 집계 당 조인.

실행 1 회 및 실행 1,000 회를 예상하고 실제로 1,000 개의 행을 계산합니다.

여기에는 차이가 없습니다.