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가 항목 테이블의 한 행을 예상 한 이유
용량의 아는 사람?
스캔이 1000 개의 행을 1 회 반환한다고 예상하고 탐색이 1 행 1000 번을 반환 할 것으로 예상했습니다. 두 견적은 모두 정확했습니다. – GSerg