테마
본사 전산실은 매일 06시에 「판매 가능 상품」 목록을 다섯 매장의 POS 메뉴로 내려보낸다. 지난달 구매팀 요청으로 "거래 정지된 거래처의 상품은 팔지 않는다"는 조건을 SQL에 한 줄 더해 배포했고, 3주 동안 아무 일이 없었다. 어제 오후 구매팀이 처음으로 거래처 한 곳(7번)을 거래 정지로 등록했다. 오늘 아침 모든 매장 POS에서 아메리카노와 카페라테를 비롯한 매장 제조 음료가 메뉴에서 사라졌다. 빠져야 할 것은 거래처 7의 상품 5개뿐이었다.
CF01 상품: 109행 · 5블록 · CF01_PK (ITM_NO) · 판매 중(SLE_YN = 'Y') 88개 = 매장 제조 음료와 디저트 41개 + 거래처 상품 47개PTNR_NO가 NULL이다(나머지 상품은 모두 거래처 번호가 있다)CF_PTNR_STOP 거래 정지 거래처: 이 기능을 위해 만든 표 · PTNR_NO NUMBER(PK라 NOT NULL) · STOP_DT · 어제까지 0행, 지금 1행(거래처 7) · CF_PTNR_STOP_PK 1블록SELECT i.ITM_NO, i.ITM_NM, i.CTG_NO
FROM CF01 i
WHERE i.SLE_YN = 'Y'
AND i.PTNR_NO NOT IN (SELECT s.PTNR_NO FROM CF_PTNR_STOP s)
ORDER BY i.ITM_NO
----------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
----------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 42 |00:00:00.01 | 6 |
| 1 | SORT ORDER BY | | 1 | 87 | 42 |00:00:00.01 | 6 |
|* 2 | HASH JOIN ANTI SNA | | 1 | 87 | 42 |00:00:00.01 | 6 |
|* 3 | TABLE ACCESS FULL | CF01 | 1 | 88 | 88 |00:00:00.01 | 5 |
| 4 | INDEX FULL SCAN | CF_PTNR_STOP_PK | 1 | 1 | 1 |00:00:00.01 | 1 |
----------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("I"."PTNR_NO"="S"."PTNR_NO")
3 - filter("I"."SLE_YN"='Y')
[어제까지 · CF_PTNR_STOP 0행] 같은 계획 · 결과 88개
NOT IN의 뜻으로 설명하시오. 실행계획 2번 줄의 SNA가 무엇인지도 설명하시오.